Whirihoranga Pūnaha Tuari kua whakahiato

E hiahia ana ahau ki te korero ki a koe tetahi tikanga pai mo te mahi me te whirihoranga o te punaha tohatoha. Ko te whirihoranga he tohu tika i roto i te reo whakahiato (Scala) ma te whakamahi i nga momo haumaru. Ko tenei pou he tauira mo taua whirihoranga me te matapaki i nga momo ahuatanga o te whakatinana i tetahi whirihoranga kua whakahiato ki roto i te tukanga whanaketanga katoa.

Whirihoranga Pūnaha Tuari kua whakahiato

(english)

Whakataki

Ko te hanga i tetahi punaha tohatoha pono ko te tikanga ka whakamahia e nga pona katoa te whirihoranga tika, ka tukutahi me etahi atu pona. Ko nga hangarau DevOps (terraform, ansible, penei ranei) ka whakamahia ki te whakaputa aunoa i nga konae whirihoranga (he mea motuhake mo ia node). E hiahia ana hoki matou ki te mohio kei te whakamahi nga kawa whakawhitiwhiti katoa i nga kawa rite (tae atu ki te putanga kotahi). Ki te kore, ka whakauruhia te hototahi ki roto i ta maatau punaha tohatoha. I roto i te ao JVM, ko tetahi hua o tenei whakaritenga ko te ahua o te whare pukapuka kei roto nga karere kawa me whakamahi ki nga waahi katoa.

Me pehea te whakamatautau i te punaha tohatoha? Ae ra, ki ta maatau he whakamatautau wae nga waahanga katoa i mua i to maatau haere ki te whakamatautau whakauru. (Kia taea ai e tatou te taapiri i nga hua whakamatautau ki te wa whakahaere, me whakarato ano he huinga whare pukapuka i te wa whakamatautau me te wa whakahaere.)

I te wa e mahi ana me nga whakamatautau whakauru, he ngawari ake te whakamahi i te ara-akomanga kotahi ki nga waahi katoa i nga waahanga katoa. Ko ta maatau mahi he whakarite kia whakamahia taua ara-akomanga i te wa whakahaere. (Ahakoa ka taea te whakahaere i nga momo pona rereke me nga ara-akomanga rereke, ka nui ake te uaua o te whirihoranga me nga uauatanga o te whakatakotoranga me nga whakamatautau whakauru.) Mo nga kaupapa o tenei pou, e whakaaro ana matou ka whakamahia e nga pokapu katoa te ara-akomanga kotahi.

Ka whanake te whirihoranga me te tono. Ka whakamahi matou i nga putanga hei tautuhi i nga waahanga rereke o te whanaketanga o te papatono. Te ahua arorau hoki ki te tautuhi i nga momo momo whirihoranga. A tuu i te whirihoranga ki roto i te punaha whakahaere putanga. Mena he kotahi noa te whirihoranga i roto i te hanga, katahi ka taea e taatau te whakamahi i te nama putanga. Mena ka whakamahia e matou he maha nga waahanga whakaputa, ka hiahia matou kia maha
manga whirihoranga me tetahi tapanga taapiri hei taapiri i te putanga (hei tauira, te ingoa o te peka). Ma tenei ka taea e taatau te tautuhi i te whirihoranga tika. Ko ia kaitautuhi whirihoranga he rite ki tetahi huinga motuhake o nga pona kua tohatohahia, nga tauranga, nga rauemi o waho, me nga putanga whare pukapuka. Mo nga kaupapa o tenei pou ka whakaaro tatou kotahi noa te peka ka taea e tatou te tautuhi i te whirihoranga i runga i te tikanga ma te whakamahi i nga tau e toru kua wehea e te ira (1.2.3).

I roto i nga taiao hou, ko nga konae whirihoranga he uaua te hanga-a-ringa. I te nuinga o nga wa ka hangaia i te wa e tukuna ana ka kore e pa atu (na reira kaua e pakaru tetahi mea). Ka puta ake he patai maori: he aha tatou ka whakamahi tonu ai i te whakatakotoranga tuhinga hei penapena whirihoranga? Ko te ahua pai ko te kaha ki te whakamahi i te waehere auau mo te whirihoranga me te whai hua mai i nga arowhai wa-whakahiato.

I roto i tenei pou ka tirotirohia e matou te whakaaro o te tohu i tetahi whirihoranga i roto i tetahi taonga kua whakahiato.

whirihoranga kua whakahiato

Ko tenei waahanga he tauira o te whirihoranga kua whakahiato. E rua nga ratonga ngawari ka whakatinanahia - te ratonga echo me te kiritaki ratonga echo. I runga i enei ratonga e rua, ka huihuia nga whiringa punaha e rua. I tetahi waahanga, kei runga nga ratonga e rua i runga i te node kotahi, i tetahi atu whiringa - i runga i nga waahanga rereke.

Ko te tikanga he maha nga pona kei roto i te punaha tohatoha. Ka taea e koe te tautuhi i nga node ma te whakamahi i nga uara o etahi momo NodeId:

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

ranei

case class NodeId(hostName: String)

ranei

object Singleton
type NodeId = Singleton.type

He maha nga mahi a nga pona, ka whakahaere ratonga ka taea te hono hononga TCP/HTTP ki waenganui i a raatau.

Hei whakaahua i tetahi hononga TCP me whai tau tauranga. Kei te pirangi ano matou ki te whakaata i te kawa e tautokohia ana i runga i taua tauranga kia mohio ai kei te whakamahi te kaihoko me te kaimau i te kawa kotahi. Ka whakaahuahia e matou te hononga ma te whakamahi i te akomanga e whai ake nei:

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

te wahi Port - he tauoti noa Int e tohu ana i te awhe o nga uara e whakaaetia ana:

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

Nga momo parakore

Tirohia te whare pukapuka parakore и toku te purongo. Hei poto, ka taea e te whare pukapuka te taapiri i nga here ki nga momo ka tirohia i te wa whakahiato. I tenei keehi, ko nga uara tau tauranga whaimana he tauoti 16-bit. Mo te whirihoranga whakahiato, ko te whakamahi i te whare pukapuka parakore kaore i te whakahau, engari ka pai ake te kaha o te kaitoi ki te tirotiro i te whirihoranga.

Mo nga kawa HTTP (REST), hei taapiri mo te tau tauranga, ka hiahia pea tatou ki te huarahi ki te ratonga:

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

Nga momo Phantom

Hei tautuhi i te kawa i te wa whakahiato, ka whakamahia he tawhā momo karekau e whakamahia i roto i te akomanga. Ko tenei whakatau na te mea kaore matou e whakamahi i tetahi tauira kawa i te wa whakahaere, engari e hiahia ana matou kia tirohia e te kaitoi te hototahi kawa. Ma te tohu i te kawa, kaore e taea e matou te tuku i tetahi ratonga kore tika hei whakawhirinakitanga.

Ko tetahi o nga tikanga noa ko te REST API me te raupapatanga Json:

sealed trait JsonHttpRestProtocol[RequestMessage, ResponseMessage]

te wahi RequestMessage — momo tono, ResponseMessage — momo whakautu.
Ae ra, ka taea e taatau te whakamahi i etahi atu whakaahuatanga kawa e whakarato ana i te tika o te whakaahuatanga e hiahiatia ana e matou.

Mo nga kaupapa o tenei panui, ka whakamahia e matou he putanga ngawari o te kawa:

sealed trait SimpleHttpGetRest[RequestMessage, ResponseMessage]

I konei ko te tono he aho taapiri ki te url me te whakautu ko te aho i whakahokia mai i roto i te tinana o te whakautu HTTP.

Ko te whirihoranga ratonga e whakaahuatia ana e te ingoa ratonga, tauranga, me nga whakawhirinaki. Ka taea te whakaatu i enei huānga ki te Scala i roto i nga huarahi maha (hei tauira, HList-s, momo raraunga taurangi). Mo nga kaupapa o tenei pou, ka whakamahia e matou te Tauira Keke me te tohu i nga waahanga ma te whakamahi trait'ov. (Ko te Tauira Keke ehara i te mea e hiahiatia ana mo tenei huarahi.

Ko nga whakawhirinakitanga i waenga i nga ratonga ka taea te tohu hei tikanga whakahoki i nga tauranga EndPointo etahi atu pona:

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

Hei waihanga i te ratonga paoro, he tau tauranga me te tohu e tautoko ana te tauranga i te kawa paoro. Kaore pea matou e tohu i tetahi tauranga motuhake, na te mea... Ko nga ahuatanga ka taea e koe te whakapuaki i nga tikanga me te kore e whakatinanahia (nga tikanga poto). I tenei keehi, i te wa e hanga ana i te whirihoranga raima, ka tono te kaikoipi kia tukuna he whakatinanatanga o te tikanga tangohanga me te whakarato i te tau tauranga. I te mea kua whakatinanahia e matou te tikanga, i te wa e hanga ana i tetahi whirihoranga motuhake, kaore pea matou e tohu i tetahi tauranga rereke. Ka whakamahia te uara taunoa.

I roto i te whirihoranga o te kiritaki e kii ana matou he whakawhirinakitanga ki te ratonga echo:

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

He rite te momo whakawhirinaki ki te ratonga kaweake echoService. Ina koa, i roto i te kiritaki echo me rite tonu te kawa. Na reira, ka honoa nga ratonga e rua, ka tino mohio ka mahi tika nga mea katoa.

Te whakatinanatanga o nga ratonga

He mahi hei timata me te whakamutu i te ratonga. (Ko te kaha ki te whakamutu i te ratonga he mea tino nui mo te whakamatautau.) Ano, he maha nga whiringa mo te whakatinana i taua ahuatanga (hei tauira, ka taea e taatau te whakamahi i nga momo karaehe i runga i te momo whirihoranga). Mo nga kaupapa o tenei pou ka whakamahia e matou te Tauira Keke. Ka tohu matou i te ratonga ma te whakamahi i tetahi karaehe cats.Resource, no te mea Kua whakaratohia e tenei karaehe nga huarahi hei whakapumau i te tukunga o nga rauemi mena ka raru. Ki te tiki rauemi, me whakarato tatou i te whirihoranga me te horopaki wa whakahaere kua rite. Ko te mahi whakaoho ratonga ka penei te ahua:

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

te wahi

  • Config — momo whirihoranga mo tenei ratonga
  • AddressResolver — he ahanoa wa mahi e taea ai e koe te kimi i nga wahitau o etahi atu pona (tirohia ki raro)

me etahi atu momo mai i te whare pukapuka cats:

  • F[_] — momo paanga (i roto i te keehi ngawari F[A] he mahi noa () => A. I tenei pou ka whakamahia e matou cats.IO.)
  • Reader[A,B] - nui ake iti iho ranei te rite ki te mahi A => B
  • cats.Resource - he rauemi ka taea te tiki me te tuku
  • Timer - matawā (ka taea e koe te moe mo te wa poto me te ine i nga waahi wa)
  • ContextShift - tairitenga ExecutionContext
  • Applicative — he karaehe momo paanga ka taea e koe te whakakotahi i nga paanga takitahi (tata he monad). I roto i nga tono uaua ake te ahua he pai ake te whakamahi Monad/ConcurrentEffect.

Ma te whakamahi i tenei waitohu mahi ka taea e matou te whakamahi i nga ratonga maha. Hei tauira, he ratonga kaore he mahi:

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

(Cm. waehere punaha, kei te whakatinanahia etahi atu ratonga - ratonga echo, kiritaki echo
и nga kaiwhakahaere ora.)

Ko te node he ahanoa ka taea te whakarewa i te maha o nga ratonga (ko te whakarewanga o te mekameka rauemi ka whakamanahia e te Tauira Keke):

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

Kia mahara kei te tohuhia e matou te momo whirihoranga e hiahiatia ana mo tenei node. Mena ka wareware tatou ki te tohu i tetahi o nga momo whirihoranga e hiahiatia ana e tetahi ratonga, ka puta he hapa whakahiato. Ano hoki, e kore e taea e matou te timata i te node mena ka tukuna e matou etahi mea o te momo tika me nga raraunga e tika ana.

Whakataunga Ingoa Kaihautū

Hei hono atu ki tetahi kaihautu mamao, ka hiahia matou ki tetahi wahitau IP tuuturu. Tera pea ka mohiotia te wahitau i muri mai i era atu o te whirihoranga. Na me hiahia he mahi hei mapi i te ID node ki tetahi wahitau:

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

He maha nga huarahi hei whakatinana i tenei mahi:

  1. Mena ka mohiohia nga wahitau ki a maatau i mua i te tuku, ka taea e taatau te whakaputa waehere Scala me
    wāhitau ka whakahaere i te hanga. Ma tenei ka whakahiato me te whakahaere i nga whakamatautau.
    I roto i tenei take, ka mohiohia te mahi ka taea te whakaatu i roto i te waehere hei mapi Map[NodeId, NodeAddress].
  2. I etahi wa, ka mohio noa te wahitau tuuturu i muri i te tiimata o te node.
    I tenei take, ka taea e tatou te whakatinana i te "ratonga kitenga" ka rere i mua i etahi atu pona ka rehita nga pona katoa ki tenei ratonga me te tono i nga wahitau o etahi atu pona.
  3. Mena ka taea e taatau te whakarereke /etc/hosts, ka taea e koe te whakamahi i nga ingoa kaihautu kua tautuhia (penei my-project-main-node и echo-backend) ka hono noa i enei ingoa
    me nga wahitau IP i te wa e tukuna ana.

I tenei pou e kore matou e whakaaro ki enei keehi i roto i nga korero taipitopito. Mo ta tatou
i roto i tetahi tauira taakaro, he rite tonu te wahitau IP o nga pona katoa - 127.0.0.1.

I muri mai, ka whakaarohia e rua nga waahanga mo te punaha tohatoha:

  1. Te whakatakoto i nga ratonga katoa ki runga i tetahi pona.
  2. Me te manaaki i te ratonga echo me te kiritaki echo i runga i nga waahanga rereke.

Whirihoranga mo kotahi node:

whirihoranga kōpuku kotahi

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

Ka whakatinanahia e te ahanoa te whirihoranga o te kiritaki me te tūmau. Ka whakamahia ano he whirihoranga wa-ki-ora kia whai muri i te waahi lifetime whakamutua te hōtaka. (Ka mahi hoki a Ctrl-C me te whakawātea tika i ngā rauemi katoa.)

Ka taea te whakamahi i taua huinga whirihoranga me te whakatinanatanga hei hanga i tetahi punaha kei roto e rua nga pona motuhake:

E rua whirihoranga node

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

He mea nui! Tirohia me pehea te hono o nga ratonga. Ka whakapūtā mātou i tētahi ratonga ka whakatinanahia e tētahi kōpuku hei whakatinanatanga o te tikanga whakawhirinaki o tētahi atu kōpuku. Ko te momo whakawhirinaki ka tirohia e te kaitoi, na te mea kei roto te momo kawa. I te wa e whakahaere ana, kei roto i te ti'aturi te ID node tika. He mihi ki tenei kaupapa, ka tohua e matou te tau tauranga kia kotahi tonu, ka whakamanahia ki te tohu ki te tauranga tika.

Te whakatinanatanga o nga pona punaha e rua

Mo tenei whirihoranga, ka whakamahia e matou nga mahinga ratonga kotahi kaore he huringa. Ko te mea rereke ko te mea kei a maatau e rua nga taonga e whakatinana ana i nga momo ratonga rereke:

  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
  }

Ko te pona tuatahi ka whakatinana i te tūmau me te whirihoranga tūmau anake. Ko te pona tuarua ka whakatinana i te kiritaki me te whakamahi i tetahi waahanga rereke o te whirihoranga. Ano hoki, me whakahaere nga pokapu e rua mo te oranga. Ka haere tonu te node tūmau kia mutu ra ano SIGTERM'om, ka mutu te pona kiritaki i muri i etahi wa. Cm. taupānga whakarewa.

Te tukanga whanaketanga whanui

Kia kite tatou he pehea te paanga o tenei huarahi whirihoranga ki te katoa o nga mahi whanaketanga.

Ka whakahiatohia te whirihoranga me te toenga o te waehere ka hangaia he toi (.jar). Te ahua nei he mea tika ki te whakatakoto i te whirihoranga ki tetahi toi motuhake. Ko tenei na te mea ka taea e tatou te maha o nga whirihoranga i runga i te waehere kotahi. Ano, ka taea te whakaputa taonga e rite ana ki nga peka whirihoranga rereke. Ko te whakawhirinaki ki nga momo momo whare pukapuka ka tiakina me te whirihoranga, a ka tiakina enei putanga mo ake tonu atu ina whakatau ana matou ki te tuku i taua momo whirihoranga.

Ko nga huringa whirihoranga ka huri hei huringa waehere. Na reira, ia
ka hipokina te huringa e te tukanga whakapumautanga kounga noa:

Tikiti i roto i te bug tracker -> PR -> arotake -> hanumi me nga peka e tika ana ->
whakauru -> tukunga

Ko nga hua matua o te whakatinana i te whirihoranga kua whakahiato ko:

  1. Ka rite tonu te whirihoranga puta noa i nga pokapu katoa o te punaha toha. Na te mea ka whiwhi nga pona katoa i te whirihoranga kotahi mai i te puna kotahi.

  2. He raruraru ki te huri i te whirihoranga i roto i tetahi o nga pona. No reira, kaore pea te "rerenga whirihoranga".

  3. Ka uaua ake te whakarereketanga iti ki te whirihoranga.

  4. Ko te nuinga o nga huringa whirihoranga ka puta hei waahanga o te tukanga whanaketanga katoa, ka arotakehia.

Kei te hiahia ahau ki tetahi putunga motuhake hei penapena i te whirihoranga whakaputa? Kei roto pea i tenei whirihoranga nga kupuhipa me etahi atu korero tairongo e hiahia ana matou ki te aukati i te uru. I runga i tenei, he mea tika ki te penapena i te whirihoranga whakamutunga i roto i tetahi putunga motuhake. Ka taea e koe te wehe i te whirihoranga kia rua nga wahanga—kotahi kei roto i nga tautuhinga whirihoranga e waatea ana ki te iwi whanui me tetahi kei roto i nga tautuhinga aukati. Ma tenei ka taea e te nuinga o nga kaihanga te uru ki nga tautuhinga noa. He ngawari tenei wehenga ma te whakamahi i nga ahuatanga takawaenga kei roto nga uara taunoa.

He rereke pea

Me ngana ki te whakataurite i te whirihoranga kua whakahiato me etahi momo rereke noa:

  1. He konae kupu i runga i te miihini whaainga.
  2. Pataka uara-matua matua (etcd/zookeeper).
  3. Tukatuka i nga waahanga ka taea te whirihora ano/whakahou ano me te kore e timata ano te mahi.
  4. Pupuri whirihoranga ki waho o te mana toi me te mana putanga.

Ko nga konae kuputuhi he tino ngawari ki nga huringa iti. Ka taea e te kaiwhakahaere o te punaha te takiuru ki roto i te node mamao, ki te whakarereke i nga konae e tika ana me te whakaara ano i te ratonga. Mo nga punaha nui, heoi, kare pea e pai te ahua ngawari. Ko nga huringa i mahia kaore he tohu i etahi atu punaha. Kaore tetahi e arotake i nga huringa. He uaua ki te whakatau ko wai i tino whakarereke, he aha te take. Kaore i te whakamatauhia nga huringa. Mena ka tohatohahia te punaha, ka wareware pea te kaiwhakahaere ki te whakarereke i etahi atu waahanga.

(Me mahara ano ko te whakamahi i te whirihoranga whakahiato kaore e kati i te kaha ki te whakamahi i nga konae tuhinga a muri ake nei. Ka ranea ki te taapiri i te parser me te whakamana e whakaputa ana i te momo rite ki te putanga. Config, a ka taea e koe te whakamahi i nga konae tuhinga. Ka whai ake ko te uaua o te punaha me te whirihoranga whakahiato he iti ake i te uaua o te punaha e whakamahi ana i nga konae tuhinga, na te mea Ko nga konae tuhinga e hiahia ana he waehere taapiri.)

Ko te toa-nui-a-whaanui he tikanga pai mo te tohatoha i nga tawhā meta o te tono toha. Me whakatau he aha nga tawhā whirihoranga me te aha he raraunga noa. Kia whai mahi tatou C => A => B, me nga tawhā C he iti noa te whakarereke, me nga raraunga A - maha. I roto i tenei take ka taea e tatou te kii C - tawhā whirihoranga, me A - raraunga. Te ahua nei he rereke nga tawhā whirihoranga mai i nga raraunga i te mea he iti ake te huri i nga raraunga. Ano, ko nga raraunga ka puta mai i tetahi puna (mai i te kaiwhakamahi), me nga tawhā whirihoranga mai i tetahi atu (mai i te kaiwhakahaere punaha).

Mena he iti noa te whakarereke i nga tawhā me whakahou me te kore e whakaara ano i te hotaka, katahi ka raru pea te hotaka, na te mea ka tukuna e tatou nga tawhā, te rokiroki, te poroporo me te tirotiro, me te whakahaere i nga uara he. Na reira, mai i te tirohanga o te whakaiti i te uaua o te kaupapa, he mea tika ki te whakaiti i te maha o nga tawhā ka taea te huri i te wa e mahi ana te kaupapa (kaore ranei e tautoko i aua tawhā).

Mo nga kaupapa o tenei pou, ka wehea e matou nga tawhā pateko me te hihiri. Mena ka hiahia te arorau o te ratonga ki te whakarereke i nga tawhā i te wa e whakahaerehia ana te hotaka, katahi ka kiia e maatau nga tohu hihiri. Ki te kore he pateko nga whiringa ka taea te whirihora ma te whakamahi i te whirihoranga kua whakahiato. Mo te whirihora hihiko, ka hiahia pea tatou i tetahi tikanga ki te whakaara ano i nga waahanga o te hotaka me nga tawhā hou, he rite ki te pehea o te whakaara ano i nga punaha whakahaere. (Ki ta matou whakaaro, he mea tika kia karo i te whirihora i nga wa tuturu, na te mea ka piki ake te uaua o te punaha. Mena ka taea, he pai ake te whakamahi i nga kaha OS paerewa mo te whakaara ano i nga mahi.)

Ko tetahi ahuatanga nui o te whakamahi i te whirihoranga pateko e whakaaro ai te tangata ki te whirihora hihiko ko te wa e mau ai te punaha ki te whakaara ano i muri i te whakahou whirihoranga (he wa heke). Inaa, ki te hiahia taatau ki te whakarereke i te whirihoranga pateko, me whakaara ano te punaha kia whai mana nga uara hou. He rereke te taumaha o te raru mo te wa heke mo nga punaha rereke. I etahi wa, ka taea e koe te whakarite i te whakaara ano i te wa he iti te kawenga. Mena ka hiahia koe ki te whakarato ratonga tonu, ka taea e koe te whakatinana Ko te AWS ELB te whakaheke hononga. I te wa ano, ka hiahia tatou ki te whakaara ano i te punaha, ka whakarewahia e tatou he tauira whakarara o tenei punaha, ka huri i te taurite ki a ia, ka tatari kia oti nga hononga tawhito. Ka mutu nga hononga tawhito katoa, ka tutakina e matou te tauira tawhito o te punaha.

Ka whakaarohia e tatou te take o te penapena i te whirihoranga i roto, i waho ranei o te taonga. Mena ka penapenahia e matou te whirihoranga ki roto i tetahi taonga toi, katahi ka whai waahi taatau ki te manatoko i te tika o te whirihoranga i te wa o te huihuinga o te taonga. Mena kei waho te whirihoranga i te taonga toi whakahaere, he uaua ki te whai i nga huringa ki tenei konae me te aha. He aha te mea nui? Ki ta matou whakaaro, mo te maha o nga punaha whakangao he mea nui kia whai whirihoranga pumau me te kounga teitei.

Ko te putanga o te mahi toi ka taea e koe te whakatau i te wa i hangaia ai, he aha nga uara kei roto, he aha nga mahi ka taea/whakakorehia, ko wai te kawenga mo nga huringa o te whirihoranga. Ae ra, ko te penapena i te whirihoranga i roto i tetahi taonga toi me whakapau kaha, no reira me whai whakaaro koe.

Nga Putanga me nga Raraunga

E hiahia ana ahau ki te noho ki runga i nga pai me nga huakore o te hangarau e whakaarohia ana.

Hua

Kei raro nei te rarangi o nga ahuatanga matua o te whirihoranga punaha tohatoha kua whakahiato:

  1. Taki whirihoranga pateko. Ka taea e koe te tino mohio
    he tika te whirihoranga.
  2. Te reo whirihoranga taonga. Ko te tikanga, ko etahi atu tikanga whirihoranga he iti ki te whakakapinga taurangi aho i te nuinga. I te wa e whakamahi ana i a Scala, he maha nga waahanga reo e waatea ana hei whakapai ake i to whirihoranga. Hei tauira ka taea e tatou te whakamahi
    nga ahuatanga mo nga uara taunoa, ma te whakamahi i nga taonga ki nga tawhā roopu, ka taea e tatou te korero ki nga vals kua whakahuahia kotahi anake (MAROKE) i roto i te waahanga taapiri. Ka taea e koe te whakarite i nga karaehe i roto tonu i te whirihoranga (Seq, Map, nga karaehe ritenga).
  3. DSL. He maha nga ahuatanga reo a Scala e ngawari ake ai te hanga DSL. Ka taea te whakamahi i enei ahuatanga me te whakatinana i te reo whirihoranga he pai ake mo te roopu o nga kaiwhakamahi, kia pai ai te panui o nga tohungatanga rohe. Ka taea e nga tohunga, hei tauira, te uru atu ki te tukanga arotake whirihoranga.
  4. Te tapatahi me te tukutahi i waenga i nga pona. Ko tetahi o nga painga o te whirihoranga o te punaha tohatoha katoa kei te rongoa i te waahi kotahi ko nga uara katoa ka whakaatuhia kia kotahi katahi ka whakamahia ano ki nga waahi katoa e hiahiatia ana. Ma te whakamahi i nga momo phantom ki te whakapuaki i nga tauranga ka whakarite kei te whakamahi nga pona i nga kawa hototahi ki nga whirihoranga punaha tika katoa. Ma te kaha ki te whakawhirinaki ki waenga i nga pona ka tino hono nga ratonga katoa.
  5. Ko nga huringa kounga teitei. Ko te whakarereketanga o te whirihoranga ma te whakamahi i te tukanga whanaketanga noa ka taea te whakatutuki i nga paerewa kounga teitei mo te whirihoranga.
  6. Whakahou whirihoranga tukutahi. Ko te tukunga punaha aunoa i muri i nga huringa whirihoranga ka whakarite kia whakahoutia nga pona katoa.
  7. Whakamaamaa te tono. Karekau te tono e hiahia te poroporoaki, te arowhai whirihoranga, te whakahaere i nga uara he. Ma tenei ka whakaiti i te uaua o te tono. (Ko etahi o nga uauatanga o te whirihoranga e kitea ana i roto i ta maatau tauira ehara i te huanga o te whirihoranga kua whakahiatohia, engari he whakatau mohio noa na te hiahia ki te whakarato i te momo haumarutanga nui ake.) He tino ngawari ki te hoki ki te whirihoranga o mua - te whakatinana noa i te mea ngaro. nga wahanga. Na reira, ka taea e koe, hei tauira, te tiimata me te whirihoranga kua whakahiato, me te whakaroa i te whakatinanatanga o nga waahanga kore e tika ana kia tae ra ano ki te wa e tino hiahiatia ana.
  8. whirihoranga manatoko. I te mea ko nga huringa whirihoranga e whai ana i nga ahuatanga o etahi atu huringa, ko te putanga ka riro mai i a maatau he taonga toi me te putanga ahurei. Ma tenei ka taea e matou, hei tauira, ki te hoki ki tetahi putanga o mua o te whirihoranga mehemea e tika ana. Ka taea e taatau te whakamahi i te whirihoranga mai i te tau ki muri ka rite tonu te mahi a te punaha. Ma te whirihoranga pumau ka pai ake te matapae me te pono o te punaha toha. I te mea kua whakatauhia te whirihoranga i te waahanga whakahiato, he tino uaua ki te rūpahu i roto i te whakaputanga.
  9. Whakatauira. He rereke te angamahi e whakaarohia ana, ka taea te whakakotahi i nga waahanga ki nga huarahi rereke hei hanga i nga punaha rereke. Ina koa, ka taea e koe te whirihora i te punaha kia rere i runga i te pona kotahi i roto i te ahua kotahi, me nga pona maha i tetahi atu. Ka taea e koe te hanga i etahi whirihoranga mo nga ahuatanga whakaputa o te punaha.
  10. Whakamatau. Ma te whakakapi i nga ratonga takitahi me nga taonga tawai, ka taea e koe te tiki i nga momo waahanga o te punaha e pai ana mo te whakamatautau.
  11. Te whakamatautau whakauru. Ma te whirihoranga kotahi mo te punaha tohatoha katoa ka taea te whakahaere i nga waahanga katoa i roto i te taiao whakahaere hei waahanga o te whakamatautau whakauru. He ngawari ki te whai, hei tauira, he ahuatanga ka uru mai etahi pona.

Nga huakore me nga here

He rereke te whirihoranga kua whakahiato mai i etahi atu huarahi whirihoranga, kaore pea e pai mo etahi tono. Kei raro nei etahi o nga ngoikoretanga:

  1. whirihoranga pateko. I etahi wa ka hiahia koe ki te whakatika tere i te whirihoranga i roto i te whakaputa, ma te maataki i nga tikanga tiaki katoa. Ma tenei huarahi ka uaua ake. I te iti rawa, ka hiahiatia tonu te whakahiato me te tuku aunoa. He ahua whai hua tenei mo te huarahi me te ngoikoretanga i etahi wa.
  2. Whakatupuranga whirihoranga. Mena ka hangaia te konae whirihoranga e te taputapu aunoa, ka hiahiatia etahi atu mahi hei whakauru i te tuhinga hanga.
  3. Utauta. I tenei wa, ko nga taputapu me nga tikanga i hangaia hei mahi me te whirihoranga kei runga i nga konae tuhinga. Karekau enei taputapu/hangarau katoa e waatea i roto i te whirihoranga kua whakahiato.
  4. Me whakarereke nga waiaro. Kua waia nga Kaihanga me nga DevOps ki nga konae tuhinga. Ko te tino whakaaro ki te whakahiato i tetahi whirihoranga he ahua ohorere me te rerekee ka paopao.
  5. Ka hiahiatia he tukanga whanaketanga kounga teitei. Kia pai ai te whakamahi i te whirihoranga kua whakahiatohia, me tino tika te mahi aunoatanga o te hanga me te tuku tono (CI/CD). Ki te kore ka tino raruraru.

Me noho ano tatou ki runga i te maha o nga here o te tauira kua whakaarohia kaore e pa ana ki te whakaaro o te whirihoranga whakahiato:

  1. Mena ka whakaratohia e matou nga korero whirihoranga kore e whakamahia ana e te node, karekau te kaitoi e awhina i a matou ki te kite i te whakatinanatanga ngaro. Ka taea te whakatau i tenei raru ma te whakarere i te Tauira Keke me te whakamahi i nga momo tino pakari, hei tauira, HList momo raraunga taurangi ranei (nga karaehe take) hei tohu whirihoranga.
  2. He rarangi kei roto i te konae whirihoranga kaore e pa ana ki te whirihoranga ake: (package, import,whakapuakanga kaupapa; override defmo nga tawhā he uara taunoa). Ka taea te karo i tenei waahanga mena ka whakatinana koe i to ake DSL. I tua atu, ko etahi atu momo whirihoranga (hei tauira, XML) ka tukuna ano etahi here mo te hanganga konae.
  3. Mo nga kaupapa o tenei whakairinga, kaore matou e whakaaro ki te whirihora hihiko o te kahui o nga pona rite.

mutunga

I roto i tenei pou, i tirotirohia e matou te whakaaro mo te tohu whirihoranga i roto i te waehere puna ma te whakamahi i nga kaha o te punaha momo Scala. Ka taea te whakamahi i tenei huarahi ki nga momo tono hei whakakapi mo nga tikanga whirihoranga tuku iho i runga i te xml, i nga konae tuhinga ranei. Ahakoa kua whakatinanahia to maatau tauira ki Scala, ka taea te whakawhiti i nga whakaaro ano ki etahi atu reo kua whakahiato (penei i a Kotlin, C#, Swift, ...). Ka taea e koe te whakamatau i tenei huarahi ki tetahi o nga kaupapa e whai ake nei, a, ki te kore e mahi, neke atu ki te konae tuhinga, me te taapiri i nga waahanga kua ngaro.

Ko te tikanga, ko te whirihoranga kua whakahiatohia me whai tukanga whanaketanga kounga teitei. Hei utu, ka whakapumautia te kounga teitei me te pono o nga whirihoranga.

Ko te huarahi e whakaarohia ana ka taea te whakawhānui ake:

  1. Ka taea e koe te whakamahi tonotono ki te mahi i nga arowhai wa-whakahiato.
  2. Ka taea e koe te whakatinana i tetahi DSL hei whakaatu i te whirihoranga i runga i te huarahi e waatea ana ki nga kaiwhakamahi mutunga.
  3. Ka taea e koe te whakatinana i te whakahaere rauemi hihiri me te whakatikatika whirihoranga aunoa. Hei tauira, ko te whakarereke i te maha o nga node i roto i te tautau me (1) kia whiwhi ia node he whirihoranga paku rereke; (2) i whiwhi korero te kaiwhakahaere tautau mo nga pona hou.

Nga Mihi

Kei te mihi ahau ki a Andrei Saksonov, Pavel Popov me Anton Nekhaev mo o raatau whakahee whai hua mo te tuhinga tauira.

Source: will.com

Tāpiri i te kōrero