Tlhophiso e Kopantsoeng ea Tsamaiso e Abuoang

Ke kopa ho u joetsa mokhoa o le mong o khahlisang oa ho sebetsa le tlhophiso ea sistimi e ajoang. Tlhophiso e emeloa ka ho toba ka puo e hlophisitsoeng (Scala) e sebelisa mefuta e sireletsehileng. Poso ena e fana ka mohlala oa tlhophiso e joalo mme e bua ka likarolo tse fapaneng tsa ho kenya ts'ebetsong tlhophiso e hlophisitsoeng molemong oa ntlafatso ea kakaretso.

Tlhophiso e Kopantsoeng ea Tsamaiso e Abuoang

(senyesemane)

Selelekela

Ho aha sistimi e ajoang e tšepahalang ho bolela hore li-node tsohle li sebelisa tlhophiso e nepahetseng, e hokahaneng le li-node tse ling. Litheknoloji tsa DevOps (terraform, ansible kapa ntho e joalo) hangata li sebelisoa ho iketsetsa lifaele tsa tlhophiso (hangata li ikhethile bakeng sa node ka 'ngoe). Hape re ka rata ho etsa bonnete ba hore libaka tsohle tsa puisano li sebelisa mekhoa e tšoanang (ho kenyeletsoa le mofuta o tšoanang). Ho seng joalo, ho se lumellane ho tla hahoa tsamaisong ea rona e ajoang. Lefatšeng la JVM, phello e 'ngoe ea tlhokahalo ena ke hore mofuta o tšoanang oa laebrari o nang le melaetsa ea protocol o tlameha ho sebelisoa hohle.

Ho thoe'ng ka ho hlahloba tsamaiso e ajoang? Ehlile, re nka hore likarolo tsohle li na le liteko tsa yuniti pele re fetela tekong ea ho kopanya. (E le hore re hlahise liphetho tsa liteko ka nako ea ts'ebetso, re tlameha ho fana ka sete e ts'oanang ea lilaebrari nakong ea liteko le ka nako ea ts'ebetso.)

Ha u sebetsa ka liteko tsa ho kopanya, hangata ho bonolo ho sebelisa mokhoa o tšoanang oa lihlopha hohle libakeng tsohle. Seo re lokelang ho se etsa feela ke ho netefatsa hore mokhoa o tšoanang oa sehlopha o sebelisoa ka nako ea ho sebetsa. (Le hoja ho ka khoneha ka ho feletseng ho tsamaisa li-node tse fapaneng ka litsela tse fapaneng tsa lihlopha, sena se eketsa ho rarahana ho tlhophiso ea kakaretso le mathata ka liteko tsa ho tsamaisa le ho kopanya.) Bakeng sa merero ea poso ena, re nka hore li-node tsohle li tla sebelisa mokhoa o tšoanang oa classpath.

Tlhophiso e fetoha le ts'ebeliso. Re sebelisa liphetolelo ho khetholla mekhahlelo e fapaneng ea ntlafatso ea lenaneo. Ho bonahala ho utloahala ho tsebahatsa mefuta e fapaneng ea litlhophiso. Ebe u beha tlhophiso ka boeona ho sistimi ea taolo ea mofuta. Haeba ho na le tlhophiso e le 'ngoe feela tlhahisong, joale re ka sebelisa nomoro ea mofuta feela. Haeba re sebelisa mehlala e mengata ea tlhahiso, joale re tla hloka tse 'maloa
makala a tlhophiso le label e eketsehileng ho phaella phetolelong (mohlala, lebitso la lekala). Ka tsela ena re ka tseba hantle tlhophiso e nepahetseng. Sekhetho se seng le se seng sa tlhophiso se lumellana ka mokhoa o ikhethileng le motsoako o ikhethileng oa li-node, likou, lisebelisoa tsa kantle le mefuta ea laeborari. Molemong oa poso ena re tla nka hore ho na le lekala le le leng feela mme re ka tseba tlhophiso ka mokhoa o tloaelehileng re sebelisa linomoro tse tharo tse arohaneng ka letheba (1.2.3).

Libakeng tsa sejoale-joale, lifaele tsa tlhophiso ha se hangata li etsoang ka letsoho. Hangata li hlahisoa nakong ea ho romelloa 'me ha li sa ameha (e le hore o seke wa roba letho). Ho hlaha potso ea tlhaho: hobaneng re ntse re sebelisa sebopeho sa mongolo ho boloka tlhophiso? Mokhoa o mong o sebetsang o bonahala e le bokhoni ba ho sebelisa khoutu e tloaelehileng bakeng sa tlhophiso le ho rua molemo ho tsoa ho licheke tsa nako.

Ka poso ena re tla hlahloba mohopolo oa ho emela tlhophiso kahare ho artefact e hlophisitsoeng.

Tlhophiso e hlophisitsoeng

Karolo ena e fana ka mohlala oa tlhophiso e hlophisitsoeng e sa fetoheng. Litšebeletso tse peli tse bonolo lia kengoa - ts'ebeletso ea echo le moreki oa litšebeletso tsa echo. Ho ipapisitsoe le lits'ebeletso tsena tse peli, likhetho tse peli tsa sistimi li bokelloa. Ka khetho e le 'ngoe, litšebeletso ka bobeli li fumaneha sebakeng se le seng, ka khetho e' ngoe - ka li-node tse fapaneng.

Ka tloaelo tsamaiso e ajoang e na le li-node tse 'maloa. U ka khetholla li-node u sebelisa boleng ba mofuta o itseng NodeId:

sealed trait NodeId
case object Backend extends NodeId
case object Frontend extends NodeId

kapa

case class NodeId(hostName: String)

kapa esita le

object Singleton
type NodeId = Singleton.type

Li-node li etsa mesebetsi e fapaneng, li tsamaisa lits'ebeletso mme likhokahano tsa TCP/HTTP li ka thehoa lipakeng tsa tsona.

Ho hlalosa khokahano ea TCP re hloka bonyane nomoro ea boema-kepe. Hape re ka rata ho bonahatsa protocol e tšehetsoeng boema-kepeng boo ho netefatsa hore moreki le seva ba sebelisa protocol e tšoanang. Re tla hlalosa khokahano re sebelisa sehlopha se latelang:

case class TcpEndPoint[Protocol](node: NodeId, port: Port[Protocol])

moo Port - palo e felletseng feela Int e bonts'a mefuta e mengata ea boleng bo amohelehang:

type PortNumber = Refined[Int, Closed[_0, W.`65535`.T]]

Mefuta e hloekisitsoeng

Sheba laebrari e hloekisitsoeng и tsa ka tlaleha. Ka bokhutšoanyane, laebrari e u lumella ho eketsa lithibelo mefuteng e hlahlojoang ka nako ea ho bokella. Tabeng ena, boleng bo nepahetseng ba nomoro ea boema-kepe ke 16-bit integers. Bakeng sa tlhophiso e hlophisitsoeng, ho sebelisa laebrari e hloekisitsoeng ha ho tlamehe, empa ho ntlafatsa bokhoni ba moqapi oa ho lekola tlhophiso.

Bakeng sa liprotocol tsa HTTP (REST), ntle le nomoro ea boema-kepe, re kanna ra hloka tsela ea ts'ebeletso:

type UrlPathPrefix = Refined[String, MatchesRegex[W.`"[a-zA-Z_0-9/]*"`.T]]
case class PortWithPrefix[Protocol](portNumber: PortNumber, pathPrefix: UrlPathPrefix)

Mefuta ea phantom

Ho tsebahatsa protocol ka nako ea ho bokella, re sebelisa mofuta oa parameter e sa sebelisoeng ka har'a sehlopha. Qeto ena e bakoa ke taba ea hore ha re sebelise mohlala oa protocol nakong ea ts'ebetso, empa re ka rata hore moqapi a hlahlobe hore na protocol e lumellana. Ka ho hlakisa protocol, re ke ke ra khona ho fana ka ts'ebeletso e sa lokelang joalo ka boits'oaro.

E 'ngoe ea liprothokholo tse tloaelehileng ke REST API e nang le Json serialization:

sealed trait JsonHttpRestProtocol[RequestMessage, ResponseMessage]

moo RequestMessage - mofuta oa kopo, ResponseMessage - mofuta oa karabo.
Ehlile, re ka sebelisa litlhaloso tse ling tsa protocol tse fanang ka tlhaloso e nepahetseng eo re e hlokang.

Bakeng sa poso ena, re tla sebelisa mofuta o nolofalitsoeng oa protocol:

sealed trait SimpleHttpGetRest[RequestMessage, ResponseMessage]

Mona kopo ke khoele e kenyellelitsoeng ho url mme karabo ke khoele e khutlisitsoeng 'meleng oa karabo ea HTTP.

Litlhophiso tsa lits'ebeletso li hlalosoa ka lebitso la ts'ebeletso, likou le litšepeho. Lintlha tsena li ka emeloa ho Scala ka mekhoa e mengata (mohlala, HList-s, mefuta ea data ea aljebra). Bakeng sa sepheo sa poso ena, re tla sebelisa Paterone ea Cake mme re emele li-module re sebelisa trait'ba. (Paterone ea Cake ha se karolo e hlokahalang ea mokhoa ona. Ke ts'ebetsong e le 'ngoe feela e ka khonehang.)

Litšepe lipakeng tsa lits'ebeletso li ka emeloa joalo ka mekhoa e khutlisang likou EndPointLi-node tse ling:

  type EchoProtocol[A] = SimpleHttpGetRest[A, A]

  trait EchoConfig[A] extends ServiceConfig {
    def portNumber: PortNumber = 8081
    def echoPort: PortWithPrefix[EchoProtocol[A]] = PortWithPrefix[EchoProtocol[A]](portNumber, "echo")
    def echoService: HttpSimpleGetEndPoint[NodeId, EchoProtocol[A]] = providedSimpleService(echoPort)
  }

Ho theha tšebeletso ea echo, sohle seo u se hlokang ke nomoro ea boema-kepe le sesupo sa hore boema-kepe bo tšehetsa echo protocol. Re kanna ra se hlakise boema-kepe bo itseng, hobane... litšobotsi li u lumella ho phatlalatsa mekhoa ntle le ts'ebetsong (mekhoa e sa utloahaleng). Tabeng ena, ha ho etsoa tlhophiso ea konkreite, moqapi o ne a tla hloka hore re fane ka ts'ebetsong ea mokhoa o sa tloaelehang le ho fana ka nomoro ea koung. Kaha re sebelisitse mokhoa ona, ha re theha tlhophiso e itseng, re ka 'na ra se ke ra hlakisa kou e fapaneng. Ho tla sebelisoa boleng ba kamehla.

Ho tlhophiso ea moreki re phatlalatsa ho its'etleha ho ts'ebeletso ea echo:

  trait EchoClientConfig[A] {
    def testMessage: String = "test"
    def pollInterval: FiniteDuration
    def echoServiceDependency: HttpSimpleGetEndPoint[_, EchoProtocol[A]]
  }

Boikarabello ke ba mofuta o tšoanang le tšebeletso e romelloang kantle ho naha echoService. Haholo-holo, ho moreki oa echo re hloka protocol e tšoanang. Ka hona, ha re kopanya litšebeletso tse peli, re ka kholiseha hore ntho e 'ngoe le e' ngoe e tla sebetsa hantle.

Phethahatso ea litšebeletso

Ho hlokahala tšebetso ho qala le ho emisa tšebeletso. (Bokhoni ba ho emisa ts'ebeletso bo bohlokoa bakeng sa tlhahlobo.) Hape, ho na le likhetho tse 'maloa tsa ho kenya tšebetsong tšobotsi e joalo (mohlala, re ka sebelisa litlelase tsa mofuta ho latela mofuta oa tlhophiso). Bakeng sa morero oa poso ena re tla sebelisa Paterone ea Cake. Re tla emela tšebeletso ka sehlopha cats.Resource, hobane Sehlopha sena se se se ntse se fana ka mekhoa ea ho netefatsa ho lokolloa ha lisebelisoa haeba ho ka ba le mathata. Ho fumana sesebelisoa, re hloka ho fana ka tlhophiso le boemo bo lokiselitsoeng ba nako ea ho sebetsa. Mosebetsi oa ho qala tšebeletso o ka shebahala tjena:

  type ResourceReader[F[_], Config, A] = Reader[Config, Resource[F, A]]

  trait ServiceImpl[F[_]] {
    type Config
    def resource(
      implicit
      resolver: AddressResolver[F],
      timer: Timer[F],
      contextShift: ContextShift[F],
      ec: ExecutionContext,
      applicative: Applicative[F]
    ): ResourceReader[F, Config, Unit]
  }

moo

  • Config — mofuta oa tlhophiso bakeng sa ts'ebeletso ena
  • AddressResolver - ntho ea nako ea ho sebetsa e u lumellang ho fumana liaterese tsa li-node tse ling (sheba ka tlase)

le mefuta e meng e tsoang laebraring cats:

  • F[_] - mofuta oa phello (ka mokhoa o bonolo F[A] e ka ba mosebetsi feela () => A. Ka poso ena re tla sebelisa cats.IO.)
  • Reader[A,B] - e batla e tšoana le ts'ebetso A => B
  • cats.Resource - sesebelisoa se ka fumanoang le ho lokolloa
  • Timer - timer (e u lumella ho robala nakoana le ho lekanya nako ea nako)
  • ContextShift - analogue ExecutionContext
  • Applicative - sehlopha sa mofuta oa phello se u lumellang ho kopanya litlamorao tsa motho ka mong (hoo e batlang e le monad). Lits'ebetsong tse rarahaneng ho feta ho bonahala ho le molemo ho li sebelisa Monad/ConcurrentEffect.

Ka ho sebelisa tshaeno ea ts'ebetso ena re ka kenya litšebeletso tse 'maloa. Ka mohlala, tšebeletso e sa etse letho:

  trait ZeroServiceImpl[F[_]] extends ServiceImpl[F] {
    type Config <: Any
    def resource(...): ResourceReader[F, Config, Unit] =
      Reader(_ => Resource.pure[F, Unit](()))
  }

(Cm. mohloli, moo litšebeletso tse ling li etsoang - tšebeletso ea echo, echo moreki
и balaoli ba bophelo bohle.)

Node ke ntho e ka hlahisang lits'ebeletso tse 'maloa (ho qala ha letoto la lisebelisoa ho netefatsoa ke Paterone ea Cake):

object SingleNodeImpl extends ZeroServiceImpl[IO]
  with EchoServiceService
  with EchoClientService
  with FiniteDurationLifecycleServiceImpl
{
  type Config = EchoConfig[String] with EchoClientConfig[String] with FiniteDurationLifecycleConfig
}

Ka kopo hlokomela hore re hlakisa mofuta o nepahetseng oa tlhophiso e hlokahalang bakeng sa node ena. Haeba re lebala ho hlakisa e 'ngoe ea mefuta ea tlhophiso e hlokoang ke ts'ebeletso e itseng, ho tla ba le phoso ea ho bokella. Hape, re ke ke ra khona ho qala node ntle le haeba re fana ka ntho e itseng ea mofuta o loketseng ka lintlha tsohle tse hlokahalang.

Qeto ea Lebitso la Moemeli

Ho hokela ho moamoheli ea hole, re hloka aterese ea 'nete ea IP. Ho ka etsahala hore aterese e tla tsejoa hamorao ho feta tlhophiso eohle. Kahoo re hloka ts'ebetso e bonts'ang ID ea node atereseng:

case class NodeAddress[NodeId](host: Uri.Host)
trait AddressResolver[F[_]] {
  def resolve[NodeId](nodeId: NodeId): F[NodeAddress[NodeId]]
}

Ho na le mekhoa e mengata ea ho kenya ts'ebetso ena:

  1. Haeba liaterese li tsejoa ho rona pele re romelloa, re ka hlahisa khoutu ea Scala ka
    liaterese ebe o tsamaisa moaho. Sena se tla bokella le ho etsa liteko.
    Tabeng ena, mosebetsi o tla tsejoa ka mokhoa o tsitsitseng mme o ka emeloa ka khoutu e le 'mapa Map[NodeId, NodeAddress].
  2. Maemong a mang, aterese ea sebele e tsejoa feela ka mor'a hore node e qale.
    Tabeng ena, re ka kenya ts'ebetsong "ts'ebeletso ea ho sibolla" e tsamaeang pele ho li-node tse ling 'me li-node tsohle li tla ingolisa le tšebeletso ena' me li kope liaterese tsa li-node tse ling.
  3. Haeba re khona ho fetola /etc/hosts, joale o ka sebelisa mabitso a hostele a boletsoeng esale pele (joalo ka my-project-main-node и echo-backend) le ho hokahanya mabitso ana feela
    ka liaterese tsa IP nakong ea ho tsamaisoa.

Ka poso ena re ke ke ra nahana ka linyeoe tsena ka botlalo. Bakeng sa rona
mohlala oa ho bapala, li-node tsohle li tla ba le aterese e tšoanang ea IP - 127.0.0.1.

Ka mor'a moo, re nahana ka likhetho tse peli bakeng sa tsamaiso e ajoang:

  1. Ho beha litšebeletso tsohle sebakeng se le seng.
  2. Le ho tsamaisa tšebeletso ea echo le moreki oa echo libakeng tse fapaneng.

Configuration bakeng sa node e le 'ngoe:

Tokiso ea node e le 'ngoe

object SingleNodeConfig extends EchoConfig[String] 
  with EchoClientConfig[String] with FiniteDurationLifecycleConfig
{
  case object Singleton // identifier of the single node 
  // configuration of server
  type NodeId = Singleton.type
  def nodeId = Singleton

  /** Type safe service port specification. */
  override def portNumber: PortNumber = 8088

  // configuration of client

  /** We'll use the service provided by the same host. */
  def echoServiceDependency = echoService

  override def testMessage: UrlPathElement = "hello"

  def pollInterval: FiniteDuration = 1.second

  // lifecycle controller configuration
  def lifetime: FiniteDuration = 10500.milliseconds // additional 0.5 seconds so that there are 10 requests, not 9.
}

Ntho e sebelisa tlhophiso ea mofani le seva. Sebopeho sa nako ea ho phela se boetse se sebelisoa e le hore ka mor'a nako lifetime felisa lenaneo. (Ctrl-C e boetse e sebetsa le ho lokolla lisebelisoa tsohle ka nepo.)

Litšobotsi tse tšoanang tsa tlhophiso le ts'ebetsong li ka sebelisoa ho theha tsamaiso e nang le nodes tse peli tse arohaneng:

Sebopeho sa li-node tse peli

  object NodeServerConfig extends EchoConfig[String] with SigTermLifecycleConfig
  {
    type NodeId = NodeIdImpl

    def nodeId = NodeServer

    override def portNumber: PortNumber = 8080
  }

  object NodeClientConfig extends EchoClientConfig[String] with FiniteDurationLifecycleConfig
  {
    // NB! dependency specification
    def echoServiceDependency = NodeServerConfig.echoService

    def pollInterval: FiniteDuration = 1.second

    def lifetime: FiniteDuration = 10500.milliseconds // additional 0.5 seconds so that there are 10 request, not 9.

    def testMessage: String = "dolly"
  }

Bohlokoa! Hlokomela kamoo litšebeletso li hokahaneng kateng. Re hlakisa ts'ebeletso e sebelisoang ke node e le 'ngoe e le ts'ebetsong ea mokhoa o mong oa ho itšetleha ka node. Mofuta oa ho itšetleha o hlahlojoa ke moqapi, hobane e na le mofuta oa protocol. Ha e matha, ho itšetleha ho tla ba le ID e nepahetseng ea node. Ka lebaka la morero ona, re hlakisa nomoro ea boema-kepe hanngoe hantle 'me kamehla re tiisetsoa hore re tla bua ka boema-kepe bo nepahetseng.

Ts'ebetsong ea li-node tse peli tsa tsamaiso

Bakeng sa tlhophiso ena, re sebelisa ts'ebetsong ea ts'ebeletso e tšoanang ntle le liphetoho. Phapang feela ke hore hona joale re na le lintho tse peli tse sebelisang lihlopha tse fapaneng tsa litšebeletso:

  object TwoJvmNodeServerImpl extends ZeroServiceImpl[IO] with EchoServiceService with SigIntLifecycleServiceImpl {
    type Config = EchoConfig[String] with SigTermLifecycleConfig
  }

  object TwoJvmNodeClientImpl extends ZeroServiceImpl[IO] with EchoClientService with FiniteDurationLifecycleServiceImpl {
    type Config = EchoClientConfig[String] with FiniteDurationLifecycleConfig
  }

Node ea pele e sebelisa seva mme e hloka feela tlhophiso ea seva. Node ea bobeli e sebelisa moreki mme e sebelisa karolo e fapaneng ea tlhophiso. Hape li-node ka bobeli li hloka tsamaiso ea bophelo bohle. Node ea seva e sebetsa ka nako e sa lekanyetsoang ho fihlela e emisoa SIGTERM'om, mme node ea bareki e fela kamora nako e itseng. Cm. sesebelisoa sa ho qala.

Mokhoa o akaretsang oa ntlafatso

Ha re boneng hore na mokhoa ona oa tlhophiso o ama ts'ebetso ea ntlafatso ka kakaretso joang.

Tlhophiso e tla hlophisoa hammoho le khoutu e setseng mme ho tla hlahisoa artifact (.jar). Ho bonahala ho utloahala ho beha tlhophiso ka har'a artifact e fapaneng. Sena ke hobane re ka ba le litlhophiso tse ngata ho latela khoutu e le 'ngoe. Hape, hoa khoneha ho hlahisa li-artifacts tse lumellanang le makala a fapaneng a tlhophiso. Ho itšetlehile ka mefuta e itseng ea lilaebrari ho bolokiloe hammoho le tlhophiso, 'me liphetolelo tsena li bolokeha ka ho sa feleng ha re etsa qeto ea ho sebelisa mofuta oo oa tlhophiso.

Phetoho efe kapa efe ea tlhophiso e fetoha phetoho ea khoutu. 'Me ka hona, e mong le e mong
phetoho e tla koaheloa ke ts'ebetso e tloaelehileng ea netefatso ea boleng:

Tekete ho tracker ea bug -> PR -> tlhahlobo -> kopanya le makala a amehang ->
kopanyo -> thomello

Liphello tse kholo tsa ho kenya ts'ebetsong tlhophiso e hlophisitsoeng ke:

  1. Tlhophiso e tla lumellana ho pholletsa le li-node tsohle tsa tsamaiso e fanoeng. Ka lebaka la hore li-node tsohle li fumana tlhophiso e tšoanang ho tsoa mohloling o le mong.

  2. Ho na le bothata ho fetola tlhophiso sebakeng se le seng feela sa node. Ka hona, "sebopeho sa tlhophiso" ha se khonehe.

  3. Ho ba thata le ho feta ho etsa liphetoho tse nyane ho tlhophiso.

  4. Liphetoho tse ngata tsa tlhophiso li tla etsahala e le karolo ea ts'ebetso eohle ea ntlafatso 'me li tla hlahlojoa.

Na ke hloka sebaka se arohaneng sa polokelo ho boloka tlhophiso ea tlhahiso? Tokiso ena e kanna ea ba le li-password le lintlha tse ling tsa bohlokoa tseo re ka ratang ho thibela ho kena ho tsona. Ho ipapisitsoe le sena, ho bonahala ho utloahala ho boloka tlhophiso ea ho qetela sebakeng se arohaneng sa polokelo. U ka arola litlhophiso ka likarolo tse peli-e 'ngoe e na le litlhophiso tsa tlhophiso tse fumanehang phatlalatsa le e 'ngoe e nang le li-setting tse thibetsoeng. Sena se tla lumella bahlahisi ba bangata ho fihlella litlhophiso tse tloaelehileng. Karohano ena e bonolo ho e fihlela ka ho sebelisa litšobotsi tse mahareng tse nang le boleng ba kamehla.

Liphetoho tse ka bang teng

Ha re leke ho bapisa tlhophiso e hlophisitsoeng le mekhoa e meng e tloaelehileng:

  1. Faele ea mongolo mochining o shebiloeng.
  2. Lebenkele le bohareng la boleng ba linotlolo (etcd/zookeeper).
  3. Likarolo tsa ts'ebetso tse ka lokisoang bocha / tsa qalisoa bocha ntle le ho qala ts'ebetso hape.
  4. Ho boloka litlhophiso ka ntle ho li-artifact le taolo ea mofuta.

Lifaele tsa mongolo li fana ka phetoho e kholo mabapi le liphetoho tse nyane. Mookameli oa tsamaiso a ka kena ka har'a node e hōle, a etsa liphetoho ho lifaele tse loketseng ebe o qala tšebeletso hape. Bakeng sa litsamaiso tse kholo, leha ho le joalo, ho feto-fetoha ho joalo ho kanna ha se lakatsehe. Liphetoho tse entsoeng li siea mesaletsa litsamaisong tse ling. Ha ho motho ea hlahlobang liphetoho. Ho thata ho tseba hore na ke mang ea entseng liphetoho hantle le hore na ke hobane'ng. Liphetoho ha li lekoe. Haeba tsamaiso e ajoa, joale mookameli a ka lebala ho etsa phetoho e lumellanang le li-node tse ling.

(Ho lokela ho hlokomeloa hape hore ho sebelisa tlhophiso e hlophisitsoeng ha ho koale monyetla oa ho sebelisa lifaele tsa mongolo nakong e tlang. Ho tla lekana ho eketsa sekhetho le se netefatsang se hlahisang mofuta o tšoanang le tlhahiso. Config, 'me u ka sebelisa lifaele tsa mongolo. Hang-hang ho latela hore ho rarahana ha sistimi e nang le tlhophiso e hlophisitsoeng ho batla ho le tlase ho feta ho rarahana ha sistimi e sebelisang lifaele tsa mongolo, hobane lifaele tsa mongolo li hloka khoutu e eketsehileng.)

Lebenkele le bohareng la boleng ba linotlolo ke mokhoa o motle oa ho aba meta-parameter ea ts'ebeliso e ajoang. Re hloka ho etsa qeto ea hore na li-parameter tsa tlhophiso ke life le hore na ke data efe feela. A re be le mosebetsi C => A => B, le liparamente C hangata liphetoho, le data A - hangata. Tabeng ena re ka bua joalo C - litlhophiso tsa tlhophiso, le A - data. Ho bonahala eka litlhophiso tsa tlhophiso li fapana le data ka hore hangata li fetoha hangata ho feta data. Hape, data hangata e tsoa mohloling o le mong (ho tsoa ho mosebelisi), le litlhophiso tsa tlhophiso ho tsoa ho e mong (ho tsoa ho motsamaisi oa sistimi).

Haeba ka seoelo ho feto-fetoha ha maemo ho hloka ho ntlafatsoa ntle le ho qala lenaneo hape, hangata sena se ka lebisa pherekanong ea lenaneo, hobane ka tsela e itseng re tla hloka ho fana ka litekanyetso, ho boloka, ho hlahloba le ho hlahloba, le ho sebetsana le litekanyetso tse fosahetseng. Ka hona, ho ea ka pono ea ho fokotsa ho rarahana ha lenaneo, hoa utloahala ho fokotsa palo ea litekanyetso tse ka fetohang nakong ea ts'ebetso ea lenaneo (kapa ho se tšehetse mekhoa e joalo ho hang).

Bakeng sa merero ea poso ena, re tla khetholla pakeng tsa li-parameter tse tsitsitseng le tse matla. Haeba mohopolo oa ts'ebeletso o hloka ho fetola liparamente nakong ea ts'ebetso ea lenaneo, re tla bitsa li-parameter tse joalo ka matla. Ho seng joalo likhetho li tsitsitse 'me li ka hlophisoa ho sebelisoa tlhophiso e hlophisitsoeng. Bakeng sa phetoho e matla, re ka 'na ra hloka mochine oa ho qala likarolo tsa lenaneo ka li-parameter tse ncha, tse tšoanang le kamoo mekhoa ea tsamaiso ea ts'ebetso e qalang kateng. (Ka maikutlo a rona, ho eletsoa ho qoba ho tsosolosoa ha nako ea sebele, kaha sena se eketsa ho rarahana ha tsamaiso. Haeba ho khoneha, ho molemo ho sebelisa mekhoa e tloaelehileng ea OS bakeng sa ho qala ts'ebetso.)

Karolo e 'ngoe ea bohlokoa ea ho sebelisa tlhophiso e tsitsitseng e etsang hore batho ba nahane ka phetoho e matla ke nako eo e e nkang hore tsamaiso e qale hape ka mor'a hore ho be le ntlafatso ea tlhophiso (nako ea ho theoha). Ebile, haeba re hloka ho etsa liphetoho ho tlhophiso e tsitsitseng, re tla tlameha ho qala sistimi hape hore litekanyetso tse ncha li sebetse. Bothata ba nako ea ho theoha bo fapana ka matla ho litsamaiso tse fapaneng. Maemong a mang, o ka hlophisa ho qala bocha ka nako eo mojaro o leng tlase. Haeba o hloka ho fana ka ts'ebeletso e tsoelang pele, o ka kenya ts'ebetsong Khokahano ea AWS ELB e hula. Ka nako e ts'oanang, ha re hloka ho tsosolosa tsamaiso, re qala mohlala o ts'oanang oa tsamaiso ena, re fetola balancer ho eona, ebe re emela hore likhokahano tsa khale li phethe. Kamora hore likhokahano tsohle tsa khale li felile, re koala mohlala oa khale oa sistimi.

Joale a re ke re nahaneng ka taba ea ho boloka tlhophiso ka hare kapa ka ntle ho artifact. Haeba re boloka tlhophiso ka har'a sesebelisoa sa maiketsetso, bonyane re bile le monyetla oa ho netefatsa ho nepahala ha tlhophiso nakong ea kopano ea maiketsetso. Haeba tlhophiso e le ka ntle ho artifact e laoloang, ho thata ho tseba hore na ke mang ea entseng liphetoho faeleng ena le hore na ke hobane'ng. Ke ea bohlokoa hakae? Ka maikutlo a rona, bakeng sa mekhoa e mengata ea tlhahiso ke habohlokoa ho ba le sebopeho se tsitsitseng le sa boleng bo phahameng.

Mofuta oa artifact o u lumella ho tseba hore na e entsoe neng, e na le litekanyetso life, hore na ke mesebetsi efe e lumelletsoeng / e holofalitsoeng, le hore na ke mang ea ikarabellang bakeng sa phetoho efe kapa efe tlhophisong. Ehlile, ho boloka tlhophiso ka har'a ntho ea khale ho hloka boiteko bo itseng, kahoo o hloka ho etsa qeto e nang le tsebo.

Melemo le boiketlo

Ke kopa ho bua ka melemo le mathata a theknoloji e sisintsoeng.

le menyetla

Ka tlase ke lethathamo la likarolo tsa mantlha tsa tlhophiso e hlophisitsoeng ea sistimi e arotsoeng:

  1. Tlhahlobo ea tlhophiso e tsitsitseng. E u lumella ho etsa bonnete ba hore
    tlhophiso e nepahetse.
  2. Puo ea tlhophiso e ruileng. Ka tloaelo, mekhoa e meng ea tlhophiso e lekanyelitsoe ho feto-fetoha ha likhoele haholo. Ha u sebelisa Scala, ho na le likarolo tse ngata tse fapaneng tsa puo ho ntlafatsa tlhophiso ea hau. Ka mohlala, re ka sebelisa
    Litšobotsi tsa boleng ba kamehla, re sebelisa lintho ho hlophisa li-parameter, re ka bua ka li-vals tse phatlalalitsoeng hanngoe feela (DRY) sebakeng se koetsoeng. O ka kenya litlelase life kapa life ka kotloloho kahare ho tlhophiso (Seq, Map, litlelase tsa tloaelo).
  3. DSL. Scala e na le likarolo tse 'maloa tsa puo tse etsang hore ho be bonolo ho theha DSL. Hoa khoneha ho nka monyetla ka likarolo tsena le ho kenya ts'ebetsong puo ea tlhophiso e loketseng haholoanyane sehlopha sa basebelisi, e le hore tlhophiso e ka baloa ke litsebi tsa domain. Ka mohlala, litsebi li ka kenya letsoho ts'ebetsong ea tlhahlobo ea tlhophiso.
  4. Botšepehi le synchrony lipakeng tsa nodes. O mong oa melemo ea ho ba le tlhophiso ea sistimi eohle e phatlalalitsoeng e bolokiloe sebakeng se le seng ke hore boleng bohle bo phatlalatsoa hanngoe feela ebe bo sebelisoa hape kae kapa kae moo bo hlokahalang. Ho sebelisa mefuta ea phantom ho phatlalatsa likou ho netefatsa hore li-node li sebelisa li-protocol tse lumellanang ho tlhophiso eohle e nepahetseng ea sistimi. Ho ba le litšepe tse hlakileng tse tlamang lipakeng tsa li-node ho netefatsa hore lits'ebeletso tsohle li hokahane.
  5. Liphetoho tsa boleng bo holimo. Ho etsa liphetoho ho tlhophiso ho sebelisa mokhoa o tloaelehileng oa nts'etsopele ho etsa hore ho khonehe ho finyella litekanyetso tsa boleng bo phahameng bakeng sa tlhophiso hape.
  6. Ntlafatso ea tlhophiso ka nako e le 'ngoe. Ho tsamaisoa ka mokhoa o ikemetseng ka mor'a liphetoho tsa tlhophiso ho netefatsa hore li-node tsohle lia nchafatsoa.
  7. Ho nolofatsa tshebediso. Ts'ebeliso ha e hloke ho arola, ho hlahlojoa litlhophiso, kapa ho sebetsana le boleng bo fosahetseng. Sena se fokotsa ho rarahana ha kopo. (Tsela e 'ngoe ea ho rarahana ha tlhophiso e bonoang mohlaleng oa rona ha se tšobotsi ea tlhophiso e hlophisitsoeng, empa ke qeto e hlokolosi e susumetsoang ke takatso ea ho fana ka polokeho ea mofuta o moholo.) likarolo. Ka hona, ka mohlala, u ka qala ka tlhophiso e hlophisitsoeng, u fokotsa ts'ebetsong ea likarolo tse sa hlokahaleng ho fihlela nako eo e hlileng e hlokahalang ka eona.
  8. Tlhophiso e netefalitsoeng. Kaha liphetoho tsa tlhophiso li latela qetello e tloaelehileng ea liphetoho tse ling, tlhahiso eo re e fumanang ke ea maiketsetso e nang le mofuta o ikhethileng. Sena se re lumella, ho etsa mohlala, ho khutlela mofuteng o fetileng oa tlhophiso haeba ho hlokahala. Re ka ba ra sebelisa tlhophiso ho tloha selemong se fetileng mme sistimi e tla sebetsa ka mokhoa o ts'oanang. Tlhophiso e tsitsitseng e ntlafatsa ho tseba esale pele le ho tšepahala ha tsamaiso e ajoang. Kaha tlhophiso e tsitsitse sethaleng sa pokello, ho thata haholo ho e etsa tlhahiso.
  9. Modularity. Moralo o reriloeng ke oa modular 'me li-module li ka kopanngoa ka mekhoa e fapaneng ho theha litsamaiso tse fapaneng. Haholo-holo, o ka hlophisa sistimi hore e sebetse sebakeng se le seng ka sebopeho se le seng, le ho li-node tse ngata ho tse ling. O ka etsa litlhophiso tse 'maloa bakeng sa maemo a tlhahiso ea sistimi.
  10. Teko. Ka ho fetola lits'ebeletso tsa motho ka mong ka lintho tse somang, o ka fumana mefuta e mengata ea sistimi e loketseng tlhahlobo.
  11. Teko ea ho kopanya. Ho ba le tlhophiso e le 'ngoe bakeng sa tsamaiso eohle e ajoang ho etsa hore ho khonehe ho tsamaisa likarolo tsohle sebakeng se laoloang e le karolo ea tlhahlobo ea ho kopanya. Ho bonolo ho etsisa, mohlala, boemo boo ho tsona li-node tse ling li fumanehang.

Mefokolo le mefokolo

Litlhophiso tse hlophisitsoeng li fapane le mekhoa e meng ea litlhophiso 'me e kanna ea se tšoanele lits'ebetso tse ling. Ka tlase ke mathata a mang:

  1. Tlhophiso e tsitsitseng. Ka linako tse ling ho hlokahala hore u potlakele ho lokisa tlhophiso tlhahisong, ho feta mekhoa eohle ea tšireletso. Ka mokhoa ona ho ka ba thata le ho feta. Bonyane, ho bokella le ho romelloa ka boiketsetso ho ntse ho tla hlokahala. Ena ke tšobotsi ea bohlokoa ea mokhoa oa ho atamela le mofoka maemong a mang.
  2. Phetoho ea tlhophiso. Haeba faele ea tlhophiso e hlahisoa ke sesebelisoa sa othomathike, ho ka 'na ha hlokahala boiteko bo eketsehileng ho kopanya mongolo oa mohaho.
  3. Lisebelisoa. Hajoale, lisebelisoa le mekhoa e etselitsoeng ho sebetsa le tlhophiso e ipapisitse le lifaele tsa mongolo. Ha se lisebelisoa / mekhoa eohle e joalo e tla ba teng ka tlhophiso e hlophisitsoeng.
  4. Ho hlokahala phetoho ea maikutlo. Bahlahisi le li-DevOps li tloaetse lifaele tsa mongolo. Mohopolo ona oa ho hlophisa tlhophiso e kanna ea ba o sa lebelloang le o sa tloaelehang mme oa baka ho hana.
  5. Ho hlokahala ts'ebetso ea ntlafatso ea boleng bo holimo. E le hore u sebelise mokhoa o hlophisitsoeng hantle, othomathike e felletseng ea ts'ebetso ea ho aha le ho tsamaisa kopo (CI / CD) ea hlokahala. Ho seng joalo, ho tla ba thata haholo.

A re ke re bueng ka mefokolo e mengata ea mohlala o nkiloeng o sa amaneng le mohopolo oa tlhophiso e hlophisitsoeng:

  1. Haeba re fana ka tlhahisoleseding e sa hlokahaleng ea tlhophiso e sa sebelisoeng ke node, joale moqapi a ke ke a re thusa ho lemoha ts'ebetsong e sieo. Bothata bona bo ka rarolloa ka ho lahla Cake Pattern le ho sebelisa mefuta e thata haholoanyane, mohlala, HList kapa mefuta ea data ea algebraic (lihlopha tsa maemo) ho emela tlhophiso.
  2. Ho na le mela faeleng ea tlhophiso e sa amaneng le tlhophiso ka boeona: (package, import,liphatlalatso tsa ntho; override def's bakeng sa liparamente tse nang le boleng ba kamehla). Sena se ka qojoa hanyenyane haeba u sebelisa DSL ea hau. Ho phaella moo, mefuta e meng ea tlhophiso (mohlala, XML) e boetse e beha lithibelo tse itseng ho sebopeho sa faele.
  3. Ka sepheo sa poso ena, ha re nahane ka phetoho e matla ea sehlopha sa li-node tse tšoanang.

fihlela qeto e

Ka poso ena, re ile ra hlahloba mohopolo oa ho emela tlhophiso ho khoutu ea mohloli re sebelisa bokhoni bo tsoetseng pele ba sistimi ea mofuta oa Scala. Mokhoa ona o ka sebelisoa lits'ebetsong tse fapaneng joalo ka phetisetso ea mekhoa ea khale ea tlhophiso e thehiloeng ho xml kapa lifaele tsa mongolo. Leha mohlala oa rona o sebelisoa ho Scala, mehopolo e ts'oanang e ka fetisetsoa lipuong tse ling tse hlophisitsoeng (joalo ka Kotlin, C #, Swift, ...). U ka leka mokhoa ona ho e 'ngoe ea merero e latelang,' me, haeba e sa sebetse, fetela ho faele ea mongolo, u eketsa likarolo tse sieo.

Ka tlhaho, tlhophiso e hlophisitsoeng e hloka ts'ebetso ea ntlafatso ea boleng bo holimo. Ka lehlakoreng le leng, boleng bo phahameng le ho tšepahala ha litlhophiso ho netefatsoa.

Mokhoa o hlophisitsoeng o ka atolosoa:

  1. U ka sebelisa macros ho etsa tlhahlobo ea nako ea ho bokella.
  2. U ka kenya ts'ebetsong DSL ho hlahisa tlhophiso ka tsela e fumanehang ho basebelisi ba ho qetela.
  3. O ka kenya ts'ebetsong tsamaiso e matla ea lisebelisoa ka ho fetola litlhophiso tsa othomathike. Ka mohlala, ho fetola palo ea li-node ka har'a sehlopha ho hloka hore (1) node e 'ngoe le e' ngoe e fumane tlhophiso e fapaneng hanyane; (2) mookameli oa sehlopha o fumane boitsebiso bo mabapi le li-node tse ncha.

Liteboho

Ke rata ho leboha Andrei Saksonov, Pavel Popov le Anton Nekhaev bakeng sa ho nyatsa ha bona ka mokhoa o hahang oa sehlooho sa moralo.

Source: www.habr.com

Eketsa ka tlhaloso