extend ../_components/base.pug

block pagetitle
    | Service APIs   

block css 
    link(rel="stylesheet", href="../css/native-persistence.css?ver=" + config.version)
    link(rel="stylesheet", href="../css/service.css?ver=" + config.version)
    link(rel="stylesheet", href="../css/compute-apis.css?ver=" + config.version)
    link(rel="stylesheet", href="../js/vendor/highlight/night-owl.css?ver=" + config.version)

    script(src="../js/vendor/highlight/highlight.min.js")
    script(src="../js/vendor/highlight/java.min.js")
    script(src="../js/vendor/highlight/xml.min.js")
    script(src="../js/vendor/highlight/csharp.min.js")



block main
    - global.pageHref = "features"
    - config.hdrClassName = "hdr__blue"
    include ../_components/header.pug


    section.innerhero
        .container.innerhero__cont
            .innerhero__main
                .innerhero__pre.pb-3 Apache Ignite
                h1.h1.innerhero__h1 Service APIs
                .innerhero__descr.pt-2.h5.
                    Deploy your microservices straight on the cluster nodes and<br> trigger execution from the application code
                .innerhero__action 
                    a.button.innerhero__button(href="https://ignite.apache.org/docs/latest/index") Start Coding
            img.innerhero__pic.innerhero__pic--servicegrid(src="/img/features/service/service-hero.svg", alt="Distributed In-Memory Cache")
    // /.innerhero

  

    section.service1
      .container
       h2.service1__h2 Apache Ignite Service APIs Overview
       .fz20.service1__text With the services API, you can create and deploy arbitrary services on the cluster. Apache Ignite Service APIs Overview For instance, you may want to implement custom counters, hierarchical maps, or anything that you treat as a microservice.
    // /.service1    
    

    section.nativecode.container.jsTabWrap
        header.blockheader.blockheader--spl.flexi
            h2.h4.blockheader__left Use Contemporary Powerful Languages
            .blockheader__right.service-subtextvideo.fz20
                p Microservices APIs supported by Java and С#/.NET
        .nativecode__tabctrls.flexi
            a(href="#", data-tablink="nativeTabJava").nativecode__link.active Java
         
        .nativecode__tabs
            .nativecode__tab(data-tab="nativeTabJava").active
                pre.nativecode__codebox 
                    code.java.
                        Ignite ignite = Ignition.start();

                        //get the services interface associated with all server nodes
                        IgniteServices services = ignite.services();
                        
                        //start a node singleton
                        services.deployClusterSingleton("myCounterService", new MyCounterServiceImpl());
            
    // /.nativecode

    section.service2
      .container
         h2.service2__h2.h4 Services Deployment Modes
         .service2__text Deploy single or many instances of a service on the cluster
         .service2__block
             .service2item.service2item__one.flexi
                .service2item__info
                   h3.service2item__title Cluster Singleton
                   p.service2item__text The most commonly used feature is to deploy singleton services on the cluster.
                   p.service2item__text There is only one instance of the service in the cluster, and Ignite guarantees<br> that the instance is always available. 
                   p.service2item__text In case the cluster node on which the service is deployed disconnects, Ignite automatically redeploys the instance to another node.
                   
                img.service2item__image1(src="/img/features/service/one-image.svg", alt="one-image")

             .service2item.service2item__two.flexi
                img.service2item__image2(src="/img/features/service/two-image.svg", alt="two-image")
                .service2item__info.service2item__info2
                   h3.service2item__title Node Singleton
                   p.service2item__text You can specify your service as part of the node configuration and start<br> the service together with the node.
                   p.service2item__text The service is started on each node of the cluster. If the service is a cluster singleton, it is started in the first cluster node, and is redeployed to one <br>of the other nodes if the first node terminates.
              
   
     

    section.compute2
     .container
       h2.compute2__h2 Benefits Of Apache Ignite Service APIs
       .compute2__grid 
            .compute2item
              .compute2-points__item.fz20
              .compute2item__block
                h3.fz20.compute2item__title Load balancing
                p.compute2__text In all cases, other than singleton service deployment, Ignite makes sure that an equal number of services are deployed on each node within the cluster. 
                p.compute2__text Whenever cluster topology changes, Ignite will re-evaluate service deployments and may re-deploy an already deployed service on another node for better load balancing.
            .compute2item
              .compute2-points__item.fz20
              .compute2item__block
                h3.fz20.compute2item__title Fault Tolerance
                p.compute2__text Ignite always guarantees that services are continuously available, and are deployed according to the specified configuration, regardless of any topology changes or node crashes.
            .compute2item
              .compute2-points__item.fz20
              .compute2item__block
                h3.fz20.compute2item__title Hot Redeployment
                p.compute2__text You can update the implementation of a service without stopping the cluster.
                p.compute2__text Use Ignite’s DeploymentSpi configuration to re-deploy services without restarting the cluster. 
    // /.compute2

    section.native-bottom.container
        .native-bottom__grid 
            article.nativebotblock
                h3.h4.nativebotblock__title
                    img(src="/img/features/native-rocket.svg", alt="").nativebotblock__icon
                    span Ready to Start?
                p.nativebotblock__text Start coding with Ignite Service APIs
                a.nativebotblock__link.arrowlink(href="https://ignite.apache.org/docs/latest/services/services#re-deploying-services", target="_blank") Performing Service APIs 
            article.nativebotblock.nativebotblock--learn
                h3.h4.nativebotblock__title
                    img(src="/img/features/native-docs.svg", alt="").nativebotblock__icon
                    span Want to Learn More?
                p.nativebotblock__text Check out a special tutorial that shows how to build and deploy microservices with Ignite Service APIs
                a.nativebotblock__link.servicenativelink.arrowlink(href="https://www.gridgain.com/resources/blog/implementing-microservices-apache-ignite-service-apis-part-iii", target="_blank") Implementing Microservices<br> With Apache Ignite Service APIs




