Tlhophiso e kopaneng ea sistimi e phatlalalitsoeng

Ka poso ena re ka thabela ho arolelana mokhoa o khahlisang oa ho sebetsana le tlhophiso ea sistimi e phatlalalitsoeng.
Tlhophiso e emeloa ka kotloloho ka puo ea Scala ka mokhoa o sireletsehileng oa mofuta. Mohlala oa ts'ebetsong o hlalositsoe ka botlalo. Ho tšohloa lintlha tse fapaneng tsa tlhahiso, ho kenyeletsoa le ts'usumetso ts'ebetsong eohle ea ntlafatso.

Tlhophiso e kopaneng ea sistimi e phatlalalitsoeng

(ka Serussia)

Selelekela

Ho aha litsamaiso tse ajoang tse matla ho hloka ts'ebeliso ea tlhophiso e nepahetseng le e ts'oanang ho li-node tsohle. Tharollo e tloaelehileng ke ho sebelisa tlhaloso ea tlhahiso ea mongolo (terraform, ansible kapa ntho e tšoanang) le lifaele tsa tlhophiso tse hlahisoang ka bo eona (hangata - tse inehetseng bakeng sa node / karolo ka 'ngoe). Re ka boela ra batla ho sebelisa mekhoa e tšoanang ea liphetolelo tse tšoanang sebakeng se seng le se seng sa puisano (ho seng joalo re tla ba le mathata a sa lumellaneng). Lefatšeng la JVM sena se bolela hore bonyane laebrari ea melaetsa e lokela ho ba ea mofuta o tšoanang libakeng tsohle tsa puisano.

Ho thoe'ng ka ho hlahloba tsamaiso? Ehlile, re lokela ho etsa liteko tsa likarolo tsa likarolo tsohle pele re tla litekong tsa ho kopanya. E le hore re tsebe ho hlahisa liphetho tsa liteko ka nako ea ho sebetsa, re lokela ho etsa bonnete ba hore mefuta ea lilaebrari tsohle e lula e tšoana maemong a nako ea ho sebetsa le a liteko.

Ha u etsa liteko tsa ho kopanya, hangata ho bonolo haholo ho ba le tsela e tšoanang ea sehlopha ho li-node tsohle. Re hloka feela ho etsa bonnete ba hore tsela e tšoanang ea classpath e sebelisoa ha ho tsamaisoa. (Hoa khoneha ho sebelisa li-classpaths tse fapaneng ho li-node tse fapaneng, empa ho thata haholo ho emela tlhophiso ena le ho e sebelisa ka nepo.) Kahoo e le ho boloka lintho li le bonolo re tla nahana feela ka li-classpaths tse tšoanang ho li-node tsohle.

Configuration e atisa ho fetoha hammoho le software. Hangata re sebelisa liphetolelo ho khetholla tse fapaneng
mekhahlelo ea ntlafatso ea software. Ho bonahala ho utloahala ho fana ka tlhophiso tlasa taolo ea mofuta le ho supa litlhophiso tse fapaneng ka lileibole tse ling. Haeba ho na le tlhophiso e le 'ngoe feela tlhahisong, re ka sebelisa mofuta o le mong joalo ka sesupo. Ka linako tse ling re ka ba le libaka tse ngata tsa tlhahiso. 'Me bakeng sa tikoloho e' ngoe le e 'ngoe re ka hloka lekala le arohaneng la tlhophiso. Kahoo litlhophiso li kanna tsa ngoloa ka lekala le mofuta ho khetholla litlhophiso tse fapaneng. Leibole le mofuta o mong le o mong oa lekala li lumellana le motsoako o le mong oa li-node tse ajoang, likou, lisebelisoa tsa kantle, mefuta ea laebrari ea li-classpath sebakeng se seng le se seng. Mona re tla akaretsa lekala le le leng feela mme re khethe tlhophiso ka likarolo tse tharo tsa decimal (1.2.3), ka tsela e ts'oanang le ea lisebelisoa tse ling.

Libakeng tsa sejoale-joale, lifaele tsa tlhophiso ha li sa fetoloa ka letsoho. Hangata re hlahisa
config lifaele ka nako ea ho tsamaisoa le le ka mohla u se ke ua li ama kamora moo. Joale motho a ka botsa hore na hobaneng re ntse re sebelisa sebopeho sa mongolo bakeng sa lifaele tsa tlhophiso? Khetho e sebetsang ke ho beha tlhophiso ka har'a yuniti ea pokello le ho rua molemo ho netefatso ea tlhophiso ea nako.

Ka poso ena re tla hlahloba mohopolo oa ho boloka tlhophiso ka har'a artifact e hlophisitsoeng.

Tlhophiso e tsamaellanang

Karolong ena re tla tšohla mohlala oa static configuration. Litšebeletso tse peli tse bonolo - tšebeletso ea echo le mofani oa tšebeletso ea echo li ntse li hlophisoa le ho kenngoa ts'ebetsong. Ebe litsamaiso tse peli tse fapaneng tse ajoang tse nang le lits'ebeletso ka bobeli lia kenngoa. E 'ngoe ke ea tlhophiso ea node e le' ngoe le e 'ngoe bakeng sa tlhophiso ea li-node tse peli.

Sistimi e tloaelehileng e ajoang e na le li-node tse 'maloa. Li-node li ka khetholloa ho sebelisoa mofuta o itseng:

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

kapa feela

case class NodeId(hostName: String)

kapa esita

object Singleton
type NodeId = Singleton.type

Li-node tsena li etsa mesebetsi e fapaneng, li tsamaisa lits'ebeletso tse ling 'me li lokela ho khona ho buisana le li-node tse ling ka likhokahano tsa TCP/HTTP.

Bakeng sa khokahano ea TCP bonyane ho hlokahala nomoro ea boema-kepe. Re boetse re batla ho etsa bonnete ba hore moreki le seva ba bua ka protocol e tšoanang. Bakeng sa ho etsa mohlala oa khokahano lipakeng tsa li-node, a re phatlalatseng sehlopha se latelang:

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

moo Port ke feela Int ka har'a sebaka se lumelletsoeng:

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

Mefuta e hloekisitsoeng

Sheba e hloekisitsoeng laeborari. Ka bokhutšoanyane, e lumella ho eketsa lithibelo tsa nako ea ho bokella mefuta e meng. Boemong bona Int e lumelloa feela ho ba le boleng ba 16-bit bo ka emelang nomoro ea boema-kepe. Ha ho na tlhoko ea ho sebelisa laebrari ena bakeng sa mokhoa ona oa tlhophiso. E bonahala e lekana hantle feela.

Bakeng sa HTTP (REST) ​​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)

Mofuta oa phantom

Bakeng sa ho tsebahatsa protocol nakong ea ho kopanya re sebelisa tšobotsi ea Scala ea ho phatlalatsa khang ea mofuta Protocol e sa sebelisoeng sehlopheng. E bitsoa joalo mofuta oa phantom. Ka nako ea ho sebetsa ha se hangata re hlokang mohlala oa sesupo sa protocol, ke ka hona re sa se bolokeng. Nakong ea ho bokella mofuta ona oa phantom o fana ka tšireletso ea mofuta o eketsehileng. Ha re khone ho feta boema-kepe ka protocol e fosahetseng.

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

sealed trait JsonHttpRestProtocol[RequestMessage, ResponseMessage]

moo RequestMessage ke mofuta oa motheo oa melaetsa eo moreki a ka e romellang ho seva le ResponseMessage ke molaetsa oa karabo o tsoang ho seva. Ehlile, re ka theha litlhaloso tse ling tsa protocol tse hlalosang protocol ea puisano ka nepo e lakatsehang.

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

sealed trait SimpleHttpGetRest[RequestMessage, ResponseMessage]

Molaetsa oa kopo ea protocol ena o kenyellelitsoe ho url mme molaetsa oa karabo o khutlisoa joalo ka khoele e hlakileng.

Tlhophiso ea litšebeletso e ka hlalosoa ka lebitso la ts'ebeletso, pokello ea likou le tse ling tse itšetlehileng ka tsona. Ho na le mekhoa e 'maloa ea ho emela likarolo tsena kaofela ho Scala (mohlala, HList, mefuta ea data ea algebra). Molemong oa poso ena re tla sebelisa Cake Pattern mme re emele likotoana tse kopantsoeng (li-module) joalo ka litšobotsi. (Paterone ea Cake ha se tlhokahalo bakeng sa mokhoa ona o hlophisitsoeng oa tlhophiso. Ke ts'ebetsong e le 'ngoe feela e ka bang teng ea mohopolo.)

Litšepiso li ka emeloa ho sebelisoa Cake Pattern joalo ka lintlha tsa li-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)
  }

Tšebeletso ea Echo e hloka feela boema-kepe bo hlophisitsoeng. 'Me re phatlalatsa hore boema-kepe bona bo tšehetsa echo protocol. Hlokomela hore ha ho hlokahale hore re hlakise boema-kepe bo itseng hajoale, hobane trait's e lumella liphatlalatso tse sa bonahaleng. Haeba re sebelisa mekhoa e sa utloahaleng, compiler e tla hloka ts'ebetsong ketsahalong ea tlhophiso. Mona re fane ka ts'ebetsong (8081) 'me e tla sebelisoa e le boleng ba kamehla haeba re e tlōla ka tlhophiso ea konkreite.

Re ka phatlalatsa ho its'etleha ho tlhophiso ea moreki oa litšebeletso tsa echo:

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

Ho itšetleha ho na le mofuta o tšoanang le oa echoService. Haholo-holo, e hloka protocol e tšoanang. Kahoo, re ka ba le bonnete ba hore haeba re hokahanya litšepiso tsena tse peli li tla sebetsa hantle.

Ts'ebetso ea lits'ebeletso

Ts'ebeletso e hloka tšebetso ho qala le ho koala ka bokhabane. (Bokhoni ba ho koala ts'ebeletso bo bohlokoa bakeng sa tlhahlobo.) Hape ho na le likhetho tse 'maloa tsa ho hlakisa tšebetso e joalo bakeng sa tlhophiso e fanoeng (mohlala, re ka sebelisa litlelase tsa mofuta). Bakeng sa poso ena re tla sebelisa Paterone ea Cake hape. Re ka emela tšebeletso ka ho sebelisa cats.Resource e seng e fana ka bracketing le tokollo ea lisebelisoa. E le hore re fumane sesebelisoa re lokela ho fana ka tlhophiso le maemo a itseng a nako ea ho sebetsa. Kahoo ts'ebetso ea ho qala tšebeletso e 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 o hlokoang ke se qalang tšebeletso
  • AddressResolver - ntho ea nako ea ho sebetsa e nang le bokhoni ba ho fumana liaterese tsa 'nete tsa li-node tse ling (tsoela pele ho bala bakeng sa lintlha).

mefuta e meng e tsoa cats:

  • F[_] - mofuta oa phello (Ka mokhoa o bonolo F[A] e ka ba feela () => A. Ka poso ena re tla sebelisa cats.IO.)
  • Reader[A,B] — e batla e tšoana le lentsoe le tšoanang la tšebetso A => B
  • cats.Resource - e na le mekhoa ea ho fumana le ho lokolla
  • Timer — e dumella ho robala/ho lekanya nako
  • ContextShift - analogue ea ExecutionContext
  • Applicative - sephutheloana sa mesebetsi e sebetsang (hoo e batlang e le monad) (qetellong re ka e nkela sebaka ka ho hong)

Ka ho sebelisa sebopeho sena re ka kenya tšebetsong 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](()))
  }

(Bona Khoutu ea mohloli bakeng sa ts'ebetsong ea lits'ebeletso tse ling - tšebeletso ea echo,
echo moreki 'me balaoli ba bophelo bohle.)

Node ke ntho e le 'ngoe e tsamaisang litšebeletso tse' maloa (ho qala letoto la lisebelisoa ho nolofalloa ke Cake Pattern):

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

Hlokomela hore ho node re hlakisa mofuta o nepahetseng oa tlhophiso e hlokoang ke node ena. Moqapi a ke ke a re lumella ho aha ntho (Kaka) ka mofuta o sa lekaneng, hobane tšobotsi e 'ngoe le e 'ngoe ea litšebeletso e phatlalatsa tšitiso ho Config mofuta. Hape re ke ke ra khona ho qala node ntle le ho fana ka tlhophiso e felletseng.

Qeto ea aterese ea node

E le ho theha khokahanyo re hloka aterese ea sebele ea moeti bakeng sa node ka 'ngoe. E ka tsejoa hamorao ho feta likarolo tse ling tsa tlhophiso. Kahoo, re hloka mokhoa oa ho fana ka 'mapa lipakeng tsa node id le aterese ea eona. 'Mapa ona ke mosebetsi:

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

Ho na le litsela tse 'maloa tse ka khonehang tsa ho kenya ts'ebetsong mosebetsi o joalo.

  1. Haeba re tseba liaterese tsa 'nete pele re romelloa, nakong ea ts'ebetso ea li-node, joale re ka hlahisa khoutu ea Scala ka liaterese tsa' nete ebe re tsamaisa moaho kamora moo (e etsang tlhahlobo ea nako ebe e tsamaisa tlhahlobo ea tlhahlobo). Tabeng ena ts'ebetso ea rona ea 'mapa e tsejoa ka lipalo-palo mme e ka nolofalloa ho ba ntho e kang a Map[NodeId, NodeAddress].
  2. Ka linako tse ling re fumana liaterese tsa 'nete hamorao ha node e se e qalile, kapa ha re na liaterese tsa li-node tse so ka li qalisoa. Tabeng ena re kanna ra ba le ts'ebeletso ea ho sibolla e qalisoang pele ho li-node tse ling kaofela 'me node e' ngoe le e 'ngoe e ka bapatsa aterese ea eona ts'ebeletsong eo mme ea ingolisa ho batho ba itšetlehileng ka eona.
  3. Haeba re khona ho fetola /etc/hosts, re ka sebelisa mabitso a moamoheli a boletsoeng esale pele (joalo ka my-project-main-node 'me echo-backend) 'me u kopanye lebitso lena le aterese ea ip ka nako ea thomello.

Ka poso ena ha re akaretse linyeoe tsena ka lintlha tse ling. Ebile mohlaleng oa rona oa ho bapala li-node tsohle li tla ba le aterese e tšoanang ea IP - 127.0.0.1.

Ka poso ena re tla nahana ka mefuta e 'meli ea sistimi e ajoang:

  1. Sebopeho sa node e le 'ngoe, moo litšebeletso tsohle li behoang sebakeng se le seng.
  2. Mehaho e 'meli ea li-node, moo tšebeletso le moreki li leng libakeng tse fapaneng.

Tlhophiso ea a node e le 'ngoe moralo o tjena:

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.
}

Mona re theha tlhophiso e le 'ngoe e eketsang tlhophiso ea seva le bareki. Hape re hlophisa taolo ea lifecycle eo ka tloaelo e tla felisa moreki le seva kamora moo lifetime nako ea ho feta.

Sete e tšoanang ea ts'ebetsong ea lits'ebeletso le litlhophiso li ka sebelisoa ho theha sebopeho sa sistimi ka li-node tse peli tse arohaneng. Re hloka feela ho bopa li-configs tse peli tse arohaneng tsa node ka litšebeletso tse khethehileng:

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"
  }

Sheba kamoo re hlalosang ho itšetleha. Re bolela litšebeletso tse fanoeng ke node e 'ngoe e le ho itšetleha ka node ea hona joale. Mofuta oa ho itšetleha o hlahlojoa hobane o na le mofuta oa phantom o hlalosang protocol. 'Me ka nako ea ho sebetsa re tla ba le id e nepahetseng ea node. Ena ke e 'ngoe ea likarolo tsa bohlokoa tsa mokhoa o sisintsoeng oa ho hlophisa. E re fa bokhoni ba ho beha boema-kepe hang feela le ho etsa bonnete ba hore re supa boema-kepe bo nepahetseng.

Ts'ebetso ea li-node tse peli

Bakeng sa tlhophiso ena re sebelisa ts'ebetso ea lits'ebeletso tse ts'oanang hantle. Ha ho liphetoho ho hang. Leha ho le joalo, re theha lits'ebetso tse peli tse fapaneng tsa node tse nang le lits'ebeletso tse fapaneng:

  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 lehlakore la seva. Node ea bobeli e sebelisa moreki mme e hloka karolo e 'ngoe ea config. Li-node ka bobeli li hloka lintlha tse itseng tsa bophelo bohle. Bakeng sa sepheo sa node ena ea tšebeletso ea poso e tla ba le bophelo bo sa feleng bo ka felisoang ho sebelisoa SIGTERM, ha moreki oa echo a tla emisa kamora nako e behiloeng e lekanyelitsoeng. Bona the sesebelisoa sa ho qala bakeng sa lintlha tse.

Kakaretso ea ts'ebetso ea ntlafatso

Ha re boneng hore na mokhoa ona o fetola tsela eo re sebetsang ka tlhophiso joang.

Tlhophiso e le khoutu e tla hlophisoa mme e hlahise artifact. Ho bonahala ho utloahala ho arola lisebelisoa tsa tlhophiso ho tse ling tsa li-artifact tsa khoutu. Hangata re ka ba le litlhophiso tse ngata holima khoutu e le 'ngoe. 'Me ehlile, re ka ba le mefuta e mengata ea makala a fapaneng a tlhophiso. Ka tlhophiso re ka khetha mefuta e itseng ea lilaebrari 'me sena se tla lula se le teng neng kapa neng ha re tsamaisa tlhophiso ena.

Phetoho ea tlhophiso e fetoha phetoho ea khoutu. Kahoo e lokela ho koaheloa ke ts'ebetso e ts'oanang ea netefatso ea boleng:

Tekete -> PR -> tlhahlobo -> kopanya -> kopanyo e tsoelang pele -> phepelo e tsoelang pele

Ho na le liphello tse latelang tsa mokhoa ona:

  1. Tlhophiso e tsamaisana le mohlala oa sistimi e itseng. Ho bonahala eka ha ho na mokhoa oa ho ba le kamano e fosahetseng pakeng tsa li-node.
  2. Ha ho bonolo ho fetola tlhophiso sebakeng se le seng feela. Ho bonahala ho sa utloahale ho kena le ho fetola lifaele tse ling tsa mongolo. Kahoo tlhophiso ea drift e fokotseha haholo.
  3. Liphetoho tse nyane tsa tlhophiso ha ho bonolo ho li etsa.
  4. Boholo ba liphetoho tsa tlhophiso li tla latela ts'ebetso e ts'oanang ea nts'etsopele, 'me e tla fetisa tlhahlobo e itseng.

Na re hloka polokelo e arohaneng bakeng sa tlhophiso ea tlhahiso? Litlhophiso tsa tlhahiso li kanna tsa ba le tlhaiso-leseling e hlokolosi eo re ka ratang ho thibela batho ba bangata hore ba se fumanehe. Kahoo ho ka ba molemo ho boloka polokelo e arohaneng e nang le phihlello e thibetsoeng e tla ba le tlhophiso ea tlhahiso. Re ka arola tlhophiso ka likarolo tse peli - e 'ngoe e nang le likarolo tse bulehileng haholo tsa tlhahiso le e nang le karolo ea lekunutu ea tlhophiso. Sena se ka nolofalletsa ho fihlella ho bahlahisi ba bangata ho li-parameter tse ngata ha se ntse se thibela phihlello ea lintho tse hlokolosi haholo. Ho bonolo ho etsa sena ka ho sebelisa litšobotsi tse mahareng tse nang le boleng ba paramethara ea kamehla.

Phapang

Ha re boneng melemo le likotsi tsa mokhoa o reriloeng ha o bapisoa le mekhoa e meng ea taolo ea tlhophiso.

Pele ho tsohle, re tla thathamisa mekhoa e 'maloa e fapaneng le likarolo tse fapaneng tsa mokhoa o reriloeng oa ho sebetsana le tlhophiso:

  1. Faele ea mongolo mochining o shebiloeng.
  2. Polokelo ea boleng bo bohareng (joalo ka etcd/zookeeper).
  3. Likarolo tsa Subprocess tse ka lokisoang bocha/tsa qala bocha ntle le ho qala ts'ebetso.
  4. Tlhophiso e kantle ho li-artifact le taolo ea mofuta.

Faele ea mongolo e fana ka phetoho e itseng ho latela litokiso tsa ad-hoc. Mookameli oa tsamaiso a ka kena sebakeng seo u se batlang, a etsa phetoho 'me a qala tšebeletso hape. Sena se kanna sa se sebetse hantle bakeng sa litsamaiso tse kholoanyane. Ha ho mesaletsa e setseng ka morao ho phetoho. Phetoho ha e hlahlojoe ke para e 'ngoe ea mahlo. Ho ka ba thata ho fumana hore na ke eng e bakileng phetoho. Ha e so lekoe. Ho latela pono ea sistimi e phatlalalitsoeng, molaoli a ka lebala ho nchafatsa tlhophiso ho e 'ngoe ea li-node tse ling.

(Btw, haeba qetellong ho tla ba le tlhoko ea ho qala ho sebelisa lifaele tsa mongolo, re tla tlameha feela ho kenyelletsa parser + validator e ka hlahisang se tšoanang. Config thaepa 'me seo se tla lekana ho qala ho sebelisa litlhophiso tsa mongolo. Sena se boetse se bontša hore ho rarahana ha tlhophiso ea nako ea ho bokella ho nyane ho feta ho rarahana ha li-configs tse thehiloeng ho mongolo, hobane ka mofuta oa mongolo re hloka khoutu e 'ngoe.)

Polokelo ea boleng bo bohareng ke mokhoa o motle oa ho aba meta ea ts'ebeliso. Mona re hloka ho nahana ka seo re se nkang e le boleng ba tlhophiso le hore na data ke eng feela. E fuoe mosebetsi C => A => B hangata re bitsa litekanyetso tse fetohang seoelo C "configuration", ha data e fetoha hangata A - Kenya data feela. Tlhophiso e lokela ho fanoa mosebetsing pele ho data A. Ka lebaka la mohopolo ona re ka re ho lebelletsoe khafetsa ea liphetoho tse ka sebelisoang ho khetholla data ea tlhophiso ho data feela. Hape data hangata e tsoa mohloling o le mong (mosebelisi) mme tlhophiso e tsoa mohloling o fapaneng (admin). Ho sebetsana le li-parameter tse ka fetoloang ka mor'a ts'ebetso ea ho qala ho lebisa ho eketseha ha ho rarahana ha kopo. Bakeng sa li-parameter tse joalo re tla tlameha ho sebetsana le mokhoa oa bona oa ho fana, ho arola le ho netefatsa, ho sebetsana le litekanyetso tse fosahetseng. Kahoo, molemong oa ho fokotsa ho rarahana ha lenaneo, re ka fokotsa palo ea liparamente tse ka fetohang ka nako ea ho sebetsa (kapa esita le ho li felisa ka ho felletseng).

Ho latela pono ea poso ena re lokela ho etsa phapang lipakeng tsa paramente e tsitsitseng le e matla. Haeba litšebeletso tsa logic li hloka phetoho e sa tloaelehang ea li-parameter tse ling ka nako ea ho sebetsa, re ka li bitsa dynamic parameters. Ho seng joalo, li tsitsitse 'me li ka hlophisoa ho sebelisoa mokhoa o reriloeng. Bakeng sa tlhophiso e matla ho ka 'na ha hlokahala mekhoa e meng. Ka mohlala, likarolo tsa tsamaiso li ka 'na tsa qalisoa bocha ka li-parameter tse ncha tsa tlhophiso ka tsela e ts'oanang ea ho qala bocha mekhoa e fapaneng ea tsamaiso e fanoeng.
(Maikutlo a ka a ikokobelitseng ke ho qoba ho hlophisoa bocha ha nako ea ho sebetsa hobane e eketsa ho rarahana ha sistimi.
Ho ka 'na ha e-ba bonolo haholoanyane ho itšetleha feela ka tšehetso ea OS ea ho qala lits'ebetso. Leha ho le joalo, ho ka 'na ha se khonehe kamehla.)

Karolo e 'ngoe ea bohlokoa ea ho sebelisa tlhophiso e tsitsitseng eo ka linako tse ling e etsang hore batho ba nahane ka tlhophiso e matla (ntle le mabaka a mang) ke nako ea ho fokotsa litšebeletso nakong ea ntlafatso ea tlhophiso. Ehlile, haeba re tlameha ho etsa liphetoho ho tlhophiso e tsitsitseng, re tlameha ho qala sistimi hape e le hore litekanyetso tse ncha li sebetse hantle. Litlhoko tsa nako ea ho theoha lia fapana bakeng sa litsamaiso tse fapaneng, kahoo e kanna ea se be bohlokoa hakaalo. Haeba ho le bohlokoa, joale re tlameha ho rera esale pele bakeng sa ho qala bocha ha sistimi. Ka mohlala, re ka e sebelisa Khokahano ea AWS ELB e hula. Boemong bona neng kapa neng ha re hloka ho qala sistimi hape, re qala mohlala o mocha oa sistimi ka tsela e ts'oanang, ebe re fetolela ELB ho eona, ha re ntse re lumella sistimi ea khale hore e phethe ho sebeletsa likhokahano tse teng.

Ho thoe'ng ka ho boloka tlhophiso ka har'a mofuta oa maiketsetso kapa kantle? Ho boloka tlhophiso ka har'a artifact ho bolela hore maemong a mangata tlhophiso ena e fetile ts'ebetso ea netefatso ea boleng joalo ka lisebelisoa tse ling. Kahoo motho a ka ba le bonnete ba hore tlhophiso ke ea boleng bo holimo ebile e ka tšeptjoa. Ho fapana le hoo, tlhophiso faeleng e arohaneng e bolela hore ha ho na mesaletsa ea hore na ke mang ea entseng liphetoho faeleng eo le hore na ke hobane'ng. Na see se bohlokoa? Re lumela hore bakeng sa litsamaiso tse ngata tsa tlhahiso ho molemo ho ba le tlhophiso e tsitsitseng le ea boleng bo holimo.

Phetolelo ea maiketsetso e u lumella ho tseba hore na e entsoe neng, e na le litekanyetso life, hore na ke likarolo life tse nolofalitsoeng / li holofalitsoeng, ke mang ea neng a ikarabella bakeng sa ho etsa phetoho e 'ngoe le e' ngoe tlhophisong. Ho ka 'na ha hloka boiteko bo itseng ho boloka tlhophiso ka har'a artefact mme ke khetho eo u ka e khethang.

Melemo le likotsi

Mona re rata ho totobatsa melemo e meng le ho buisana ka mathata a mang a mokhoa o sisintsoeng.

le menyetla

Likarolo tsa tlhophiso e kopaneng ea sistimi e ajoang e felletseng:

  1. Tlhahlobo e tsitsitseng ea tlhophiso. Sena se fana ka boemo bo phahameng ba kholiseho, hore tlhophiso e nepahetse ha ho fanoa ka lithibelo tsa mofuta.
  2. Puo e ruileng ea tlhophiso. Ka tloaelo mekhoa e meng ea tlhophiso e lekanyelitsoe ho tse ling tse fapa-fapaneng.
    Ho sebelisa Scala motho a ka sebelisa mefuta e mengata ea lipuo ho etsa hore tlhophiso e be betere. Mohlala, re ka sebelisa litšoaneleho ho fana ka boleng ba kamehla, lintho ho beha boholo bo fapaneng, boo re ka buang ka bona vals e hlalosoa hanngoe feela sebakeng se ka ntle (DRY). Hoa khoneha ho sebelisa tatellano ea sebele, kapa mehlala ea lihlopha tse itseng (Seq, Map, joalo-joalo).
  3. DSL. Scala e na le tšehetso e ntle bakeng sa bangoli ba DSL. Motho a ka sebelisa likarolo tsena ho theha puo ea tlhophiso e loketseng haholoanyane le e bonolo ho basebelisi ba ho qetela, e le hore tlhophiso ea ho qetela bonyane e baloe ke basebelisi ba domain.
  4. Botšepehi le momahano hohle ho mahono. E 'ngoe ea melemo ea ho ba le tlhophiso bakeng sa sistimi eohle e ajoang sebakeng se le seng ke hore litekanyetso tsohle li hlalosoa hang-hang ebe li sebelisoa hape libakeng tsohle moo re li hlokang. Hape, thaepa liphatlalatso tse bolokehileng tsa boema-kepe etsa bonnete ba hore litlhophisong tsohle tse nepahetseng, li-node tsa sistimi li tla bua puo e tšoanang. Ho na le litšebelisano tse hlakileng lipakeng tsa li-node tse etsang hore ho be thata ho lebala ho fana ka litšebeletso tse ling.
  5. Boleng bo phahameng ba liphetoho. Mokhoa o akaretsang oa ho fetisa liphetoho tsa tlhophiso ka mokhoa o tloaelehileng oa PR o theha maemo a holimo a boleng le tlhophisong.
  6. Liphetoho tsa tlhophiso ka nako e le 'ngoe. Nako le nako ha re etsa liphetoho ho tlhophiso ea othomathike e netefatsa hore li-node tsohle lia ntlafatsoa.
  7. Ho nolofatsa kopo. Ts'ebeliso ha e hloke ho hlahlobisisa le ho netefatsa litlhophiso le ho sebetsana le maemo a fosahetseng a tlhophiso. Sena se nolofatsa ts'ebeliso ka kakaretso. (Keketseho e 'ngoe ea ho rarahana e teng ho tlhophiso ka boeona, empa ke khoebo e hlokolosi e lebisang polokehong.) Ho bonolo haholo ho khutlela ho tlhophiso e tloaelehileng - eketsa feela likotoana tse sieo. Ho bonolo ho qala ka tlhophiso e hlophisitsoeng le ho chechisa ts'ebetsong ea likotoana tse ling ho ea ka linako tse ling hamorao.
  8. Phetoho e fetotsoeng. Ka lebaka la hore liphetoho tsa tlhophiso li latela ts'ebetso e ts'oanang ea nts'etsopele, ka lebaka leo re fumana artifact e nang le mofuta o ikhethang. E re lumella ho khutlisa tlhophiso ha ho hlokahala. Re ka ba ra tsamaisa tlhophiso e ileng ea sebelisoa selemong se fetileng mme e tla sebetsa ka tsela e ts'oanang. Tlhophiso e tsitsitseng e ntlafatsa ho bolela esale pele le ho tšepahala ha tsamaiso e ajoang. Tlhophiso e tsitsitsoe ka nako ea ho bokella 'me e ke ke ea senyeha habonolo tsamaisong ea tlhahiso.
  9. Modularity. Moralo o reriloeng ke oa modular le limmojule li ka kopanngoa ka mekhoa e fapaneng ea ho
    ts'ehetsa litlhophiso tse fapaneng (litlhophiso / meralo). Haholo-holo, hoa khoneha ho ba le sebopeho se senyenyane sa node e le 'ngoe le sebaka se seholo sa li-node tse ngata. Hoa utloahala ho ba le meralo e mengata ea tlhahiso.
  10. Teko. Bakeng sa liteko, motho a ka sebelisa ts'ebeletso ea soma 'me a e sebelisa e le ho itšetleha ka mofuta o sireletsehileng. Likarolo tse 'maloa tse fapaneng tsa liteko tse nang le likarolo tse fapaneng tse nketsoeng sebaka ke litšeho li ka bolokoa ka nako e le ngoe.
  11. Teko ea ho kopanya. Ka linako tse ling ho litsamaiso tse ajoang ho thata ho etsa liteko tsa ho kopanya. Re sebelisa mokhoa o hlalositsoeng oa ho thaepa tlhophiso e bolokehileng ea sistimi e ajoang e felletseng, re ka tsamaisa likarolo tsohle tse ajoang ho seva se le seng ka mokhoa o laolehang. Ho bonolo ho etsisa boemo
    ha e 'ngoe ea litšebeletso e se e sa fumanehe.

go tlhoka mesola

Mokhoa o hlophisitsoeng oa tlhophiso o fapane le o "tloaelehileng" mme o kanna oa se lumellane le litlhoko tsohle. Mona ke tse ling tsa mefokolo ea config e hlophisitsoeng:

  1. Tlhophiso e tsitsitseng. E kanna ea se tšoanelehe lits'ebetsong tsohle. Maemong a mang ho na le tlhokahalo ea ho lokisa kapele tlhahiso ea tlhahiso ho feta mehato eohle ea polokeho. Mokhoa ona o etsa hore ho be thata le ho feta. Ho bokella le ho tsamaisa bocha hoa hlokahala ka mor'a ho etsa phetoho leha e le efe ho tlhophiso. Sena ke bobeli tšobotsi le moroalo.
  2. Phetoho ea tlhophiso. Ha config e hlahisoa ke sesebelisoa se seng sa othomathike mokhoa ona o hloka ho bokelloa ho latelang (e leng se ka 'nang sa hloleha). Ho ka 'na ha hloka boiteko bo eketsehileng ho kopanya mohato ona o eketsehileng tsamaisong ea kaho.
  3. Lisebelisoa. Ho na le lisebelisoa tse ngata tse sebelisoang kajeno tse itšetlehileng ka li-configs tse thehiloeng ho mongolo. Ba bang ba bona
    e ke ke ea sebetsa ha tlhophiso e hlophisoa.
  4. Ho hlokahala phetoho ea maikutlo. Bahlahisi le DevOps ba tloaelane le lifaele tsa tlhophiso ea mongolo. Khopolo ea ho bokella tlhophiso e kanna ea utloahala e makatsa ho bona.
  5. Pele o kenya tlhophiso e ka kopannang ho hlokahala ts'ebetso ea ntlafatso ea boleng bo holimo.

Ho na le mefokolo ea mohlala o kentsoeng:

  1. Haeba re fana ka tlhophiso e eketsehileng e sa batloeng ke ts'ebetsong ea node, compiler e ke ke ea re thusa ho bona ts'ebetsong e le sieo. Sena se ka rarolloa ka ho sebelisa HList kapa li-ADT (lihlopha tsa linyeoe) bakeng sa tlhophiso ea li-node sebakeng sa litšobotsi le Paterone ea Cake.
  2. Re tlameha ho fana ka boilerplate ho faele ea config: (package, import, object liphatlalatso;
    override def's bakeng sa liparamente tse nang le boleng ba kamehla). Sena se ka rarolloa hanyane ho sebelisoa DSL.
  3. Ka poso ena ha re bue ka phetoho e matla ea lihlopha tsa li-node tse tšoanang.

fihlela qeto e

Ka poso ena re buisane ka mohopolo oa ho emela tlhophiso ka kotloloho ho khoutu ea mohloli ka mokhoa o bolokehileng. Mokhoa ona o ka sebelisoa lits'ebetsong tse ngata joalo ka phetisetso ea xml- le litlhophiso tse ling tse thehiloeng ho mongolo. Leha mohlala oa rona o kentsoe ts'ebetsong ho Scala, o ka fetoleloa le lipuong tse ling tse kopaneng (joalo ka Kotlin, C #, Swift, joalo-joalo). Motho a ka leka mokhoa ona morerong o mocha, 'me haeba o sa lumellane hantle, a fetole tsela ea khale.

Ehlile, tlhophiso e kopaneng e hloka ts'ebetso ea ntlafatso ea boleng bo holimo. Ka ho khutlisa e tšepisa ho fana ka ts'ebetso e ts'oanang ea boleng bo holimo.

Mokhoa ona o ka atolosoa ka litsela tse fapaneng:

  1. Motho a ka sebelisa li-macros ho etsa netefatso ea tlhophiso mme a hloleha ka nako ea ho bokella haeba ho ka ba le liphoso tsa khoebo-logic.
  2. DSL e ka kenngoa ts'ebetsong ho emela tlhophiso ka mokhoa o bonolo oa ho sebelisa domain.
  3. Tsamaiso e matla ea lisebelisoa e nang le litokiso tsa litlhophiso tsa othomathike. Mohlala, ha re lokisa palo ea li-cluster node re ka batla (1) li-node ho fumana tlhophiso e fetotsoeng hanyane; (2) mookameli oa sehlopha ho fumana lintlha tse ncha tsa nodes.

Thanks

Ke rata ho leboha Andrey Saksonov, Pavel Popov, Anton Nehaev ka ho fana ka maikutlo a khothatsang mabapi le moralo oa poso ena e nthusitseng ho hlakisa.

Source: www.habr.com