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="/public/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="/public/img/features/service/one-image.svg", alt="one-image")

             .service2item.service2item__two.flexi
                img.service2item__image2(src="/public/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="/public/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="/public/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




