extend ../_components/base.pug

block pagetitle
    | Deployment Options  

block css 
    link(rel="stylesheet", href="../css/native-persistence.css")
    link(rel="stylesheet", href="../css/deployment-opts.css")



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.innerhero__mega Deployment <br>Options
            img.innerhero__pic.innerhero__pic--deploy(src="/public/img/features/deployment/hero.svg", alt="Deployment Options")
    // /.innerhero


    section.deploymenytext.container.flexi 
        .deploymenytext__main
            p Apache Ignite&reg; implements the shared-nothing architecture where all cluster nodes are equal and there is&nbsp;no&nbsp;single point of&nbsp;failure or&nbsp;bottleneck. Ignite does NOT have a&nbsp;component such as&nbsp;a&nbsp;master node or&nbsp;name node that is&nbsp;present in&nbsp;most distributed systems.
            
            p Ignite nodes discover each other automatically in&nbsp;your environment, and the cluster can be&nbsp;scaled out or&nbsp;in&nbsp;easily.

            p.pb-4 Apache Ignite can run on&nbsp;bare metal, virtual machines, Docker, Kubernetes, and cloud environments. Technically there are no&nbsp;limitations in&nbsp;regards to&nbsp;deployment environments&nbsp;&mdash; since Ignite nodes can auto-discover each other via the TCP/IP interface, you can launch a&nbsp;cluster anywhere.

            h3.h5.pt-2.pb-2.deploymenytext__title Servers, clients and protocols
            p Ignite defines two types of&nbsp;nodes&nbsp;&mdash; servers and clients. A&nbsp;server node is&nbsp;the base computational and data storage unit. Typically, you start a&nbsp;single server node per machine or&nbsp;container and it&nbsp;will scale vertically by&nbsp;utilizing all of&nbsp;the CPU, RAM, and other resources available unless specified differently. These resources are pooled and become available to&nbsp;Ignite applications once the server node joins the cluster of&nbsp;other server nodes.
            
            p A&nbsp;cluster is&nbsp;a&nbsp;group of&nbsp;server nodes interconnected together in&nbsp;order to&nbsp;provide shared resources like RAM and CPU to&nbsp;your applications.

            p Client nodes (aka. thick clients) are your connection endpoints and gateways from the application layer to&nbsp;the cluster of&nbsp;server nodes. You always embed a&nbsp;client into your application code and execute the required APIs. The clients shield all the complexity of&nbsp;Ignite&rsquo;s distributed nature from application developers who will see the cluster as&nbsp;a&nbsp;single unit. It&rsquo;s as&nbsp;simple as&nbsp;connecting to&nbsp;an&nbsp;RDBMS via a&nbsp;JDBC driver or&nbsp;Spring Data framework.

            p In&nbsp;addition to&nbsp;the thick clients, you can access the cluster with Ignite thin clients, JDBC and ODBC drivers, or&nbsp;the REST API.


        aside.deploymenytext__picwrap.picwrap 
            img.deploymenytext__pic(src="/public/img/features/deployment/deploy-pic.svg", alt="")


    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 Discover our quick start guide and build <br>your first application in 5-10 minutes
                a.nativebotblock__link.arrowlink(href="https://ignite.apache.org/docs/latest/", target="_blank") Quick Start Guide
            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 Read Native Persistence article
                a.nativebotblock__link.arrowlink(href="/arch/native-persistence.html", target="_blank") Native Persistence




