whirihoranga whakahiato o te punaha toha

I roto i tenei pou e hiahia ana matou ki te whakapuaki i tetahi huarahi whakamere mo te whirihoranga o te punaha toha.
Ko te whirihoranga he tohu tika ki te reo Scala i runga i te momo momo haumaru. Ko tetahi tauira whakatinanatanga e whakaahuahia ana i roto i nga korero taipitopito. Ka matapakihia nga momo ahuatanga o te tono, tae atu ki te awe ki te katoa o te tukanga whanaketanga.

whirihoranga whakahiato o te punaha toha

(i Rusia)

Kupu Whakataki

Ko te hanga i nga punaha toha pakari me whakamahi te whirihoranga tika me te taurite ki nga pona katoa. Ko te otinga angamaheni ko te whakamahi i te whakaahuatanga whakatakotoranga tuhinga (terraform, ansible, he mea rite ranei) me nga konae whirihoranga hanga aunoa (i te nuinga o nga wa — kua whakatapua mo ia pona/mahi). Ka hiahia hoki matou ki te whakamahi i nga kawa rite o nga momo putanga ki ia pokapu whakawhitiwhiti (mehemea ka pa ki nga take hotokore). I roto i te ao JVM ko te tikanga ko te iti rawa o te whare pukapuka karere kia rite tonu te putanga ki runga i nga pokapu whakawhitiwhiti katoa.

Me pehea te whakamatautau i te punaha? Ae ra, me whakamatau taatau mo nga waahanga katoa i mua i te haere ki nga whakamatautau whakauru. Kia taea ai te taapiri i nga hua whakamatautau mo te wa whakahaere, me whakarite kia rite tonu nga putanga o nga whare pukapuka katoa i roto i nga waahi whakahaere me nga taiao whakamatautau.

I te wa e whakahaere ana i nga whakamatautau whakauru, he maamaa ake te whai i te ara-akomanga kotahi ki nga pona katoa. Me tino mohio kei te whakamahia taua ara-akomanga mo te tukunga. (Ka taea te whakamahi i nga ara-akomanga rereke i runga i nga pona rereke, engari he uaua ake te tohu i tenei whirihoranga me te whakatakoto tika.) Na kia ngawari nga mea ka whakaarohia e matou nga ara-akomanga rite ki nga pona katoa.

Ko te whirihoranga ka tipu haere tahi me te rorohiko. I te nuinga o te wa ka whakamahi matou i nga momo putanga hei tautuhi i nga momo rereke
nga wahanga o te whanaketanga rorohiko. He mea tika ki te kapi i te whirihoranga i raro i te whakahaeretanga putanga me te tautuhi i nga whirihoranga rereke me etahi tapanga. Mena he kotahi noa te whirihoranga i roto i te whakaputanga, ka whakamahi pea tatou i te putanga kotahi hei tautohu. I etahi wa ka maha pea nga taiao whakaputa. A mo ia taiao ka hiahia pea tatou ki tetahi peka motuhake o te whirihoranga. No reira ka tapaina nga whirihoranga ki te peka me te putanga hei tautuhi motuhake i nga whirihoranga rereke. Ko ia tapanga peka me te putanga e rite ana ki te huinga kotahi o nga pona kua tohatohahia, nga tauranga, nga rauemi o waho, nga momo putanga whare pukapuka classpath ki ia pona. I konei ka hipokina e matou te peka kotahi me te tautuhi i nga whirihoranga ma te waahanga e toru nga waahanga ira (1.2.3), he rite tonu ki etahi atu taonga.

I roto i nga taiao hou kaore e whakarereketia nga konae whirihoranga a-ringa. Ko te tikanga ka whakaputa tatou
whirihora i nga konae i te wa tukunga me te kaua rawa e pa ki a ratou muri iho. Na ka patai tetahi he aha tatou ka whakamahi tonu ai i te whakatakotoranga tuhinga mo nga konae whirihoranga? Ko te kowhiringa pai ko te tuu i te whirihoranga ki roto i te waahanga whakahiato me te whai hua mai i te whakamanatanga whirihoranga wa whakahiato.

I tenei pou ka tirotirohia e maatau te whakaaro o te pupuri i te whirihoranga i roto i te toi whakahiato.

whirihoranga whakahiato

I tenei wahanga ka matapakihia he tauira o te whirihoranga pateko. E rua nga ratonga ngawari - ko te ratonga echo me te kiritaki o te ratonga echo kei te whirihorahia me te whakatinana. Na e rua nga punaha tohatoha rereke me nga ratonga e rua ka tukuna. Ko tetahi mo te whirihoranga node kotahi me tetahi mo te whirihoranga node e rua.

He iti noa nga pona kei roto i te punaha tohatoha noa. Ka taea te tautuhi i nga node ma te whakamahi i etahi momo:

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

ranei tika

case class NodeId(hostName: String)

ranei ara

object Singleton
type NodeId = Singleton.type

He maha nga mahi a enei pona, ka whakahaere etahi ratonga, me kaha ki te whakawhiti korero ki etahi atu pona ma nga hononga TCP/HTTP.

Mo te hononga TCP ka hiahiatia he tau tauranga. Kei te pirangi ano matou kia rite te kawa o te korero a te kaihoko me te kaitoro. Hei whakatauira i te hononga i waenga i nga pona me whakaatu te akomanga e whai ake nei:

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

te wahi Port he noa Int i roto i te awhe e whakaaetia ana:

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

Nga momo parakore

kite parakore whare pukapuka. Hei poto, ka taea te taapiri i nga herenga wa whakahiato ki etahi atu momo. I tenei take Int ka whakaaetia kia whai uara 16-bit hei tohu i te nama tauranga. Kaore he tikanga ki te whakamahi i tenei whare pukapuka mo tenei huarahi whirihoranga. Ko te ahua he pai rawa atu.

Mo te HTTP (REST) ​​ka hiahia pea matou ki tetahi ara o te ratonga:

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

Momo Phantom

Hei tautuhi i te kawa i te wa e whakahiato ana kei te whakamahi matou i te ahuatanga Scala mo te whakapuaki momo tautohetohe Protocol e kore e whakamahia i roto i te akomanga. He mea e kiia ana momo phantom. I te wa whakahaere, kare e hiahiatia he tauira o te tohu kawa, na reira karekau e penapena. I te wa e whakahiato ana ka hoatu e tenei momo phantom etahi atu momo haumaru. Kaore e taea e matou te tuku tauranga me te kawa he.

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

sealed trait JsonHttpRestProtocol[RequestMessage, ResponseMessage]

te wahi RequestMessage Ko te momo turanga o nga karere ka taea e te kiritaki te tuku ki te tūmau me te ResponseMessage Ko te karere whakautu mai i te tūmau. Ko te tikanga, ka taea e tatou te hanga etahi atu whakaahuatanga kawa e tohu ana i te kawa korero me te tino tika.

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

sealed trait SimpleHttpGetRest[RequestMessage, ResponseMessage]

I roto i tenei kawa ka apitihia te karere tono ki te url ka whakahokia te karere whakautu hei aho noa.

Ka taea te whakaahua i tetahi whirihoranga ratonga ma te ingoa ratonga, he kohinga tauranga me etahi o nga whakawhirinakitanga. He torutoru noa nga huarahi hei whakaatu i enei huānga katoa i roto i te Scala (hei tauira, HList, momo raraunga taurangi). Mo nga kaupapa o tenei panui ka whakamahia e matou te Tauira Keke me te tohu i nga waahanga whakakotahi (kowae) hei ahuatanga. (Ehara te Tauira Keke i te whakaritenga mo tenei huarahi whirihoranga whakahiato. Kotahi noa te whakatinanatanga o te whakaaro.)

Ka taea te whakaatu i nga whakawhirinakitanga ma te whakamahi i te Tauira Keke hei tohu mutunga o 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)
  }

Ko te ratonga echo anake me whirihorahia he tauranga. A ka kii matou kei te tautoko tenei tauranga i te kawa paoro. Kia mahara kaore e tika kia tohua he tauranga i tenei wa, na te mea ka taea e te huanga te whakaatu tikanga waitara. Mena ka whakamahi tatou i nga tikanga waitara, ka hiahiatia e te kaitoi he whakatinanatanga i roto i te tauira whirihoranga. I konei kua whakaratohia e matou te whakatinanatanga (8081) a ka whakamahia hei uara taunoa mena ka pekehia i roto i te whirihoranga raima.

Ka taea e matou te kii he whakawhirinakitanga ki te whirihoranga o te kiritaki ratonga echo:

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

He rite te momo whakawhirinaki ki te echoService. Ina koa, he rite te kawa e hiahiatia ana. No reira, ka tino mohio mena ka honoa enei whakawhirinaki e rua ka mahi tika.

Te whakatinanatanga o nga ratonga

Kei te hiahia tetahi ratonga ki te tiimata me te kati pai. (He mea nui te kaha ki te whakaweto i tetahi ratonga hei whakamatautau.) He iti ano nga whiringa mo te tohu i taua mahi mo tetahi whirihora (hei tauira, ka taea e taatau te whakamahi i nga karaehe momo). Mo tenei panui ka whakamahi ano matou i te Tauira Keke. Ka taea e matou te tohu i tetahi ratonga ma te whakamahi cats.Resource e whakarato ana i te taiapa me te tuku rauemi. Mo te whiwhi rauemi me whakarato he whirihoranga me etahi horopaki wa whakahaere. Na ka penei pea te ahua o te mahi tiimata ratonga:

  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 e hiahiatia ana e tenei kai timata ratonga
  • AddressResolver — he ahanoa wa whakahaere e whai mana ana ki te tiki wahitau tuturu o etahi atu pona (panui tonu mo nga taipitopito).

i ahu mai etahi atu momo cats:

  • F[_] — momo paanga (I roto i te keehi ngawari F[A] tika pea () => A. I tenei pou ka whakamahia e matou cats.IO.)
  • Reader[A,B] — he kupu taurite mo tetahi mahi A => B
  • cats.Resource - he huarahi ki te whiwhi me te tuku
  • Timer — ka taea te moe/te ine i te waa
  • ContextShift - tairitenga o ExecutionContext
  • Applicative - te takai o nga mahi e whai mana ana (tata he monad) (kei te mutunga ka whakakapia e tatou ki tetahi atu mea)

Ma te whakamahi i tenei atanga ka taea e matou te whakatinana i etahi ratonga. 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](()))
  }

(Tirohia Ko te waehere puna mo etahi atu ratonga whakatinana — ratonga echo,
kiritaki echo a nga kaiwhakahaere ora.)

Ko te node he ahanoa kotahi e whakahaere ana i etahi ratonga (ma te Tauira Keke ka tiimata te tiimata o nga rauemi):

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

Kia mahara kei roto i te node ka tohua e matou te momo whirihoranga e hiahiatia ana e tenei node. Kare e tukua e te Kaihanga te hanga i te ahanoa (Keke) me te iti rawa te momo, na te mea ko ia ahuatanga ratonga e whakaatu ana he herenga ki te Config momo. Kare hoki e taea e matou te timata i te node me te kore e whakarato whirihoranga katoa.

Taumira wāhitau kōpuku

Hei whakapumau i tetahi hononga ka hiahiatia he wahitau kaihautu mo ia pona. Ka mohiotia pea i muri mai i etahi atu waahanga o te whirihoranga. No reira, me whai huarahi maatau ki te tuku mapi i waenga i te node id me tona wahitau tuturu. He mahinga tenei mapi:

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

He torutoru noa nga huarahi hei whakatinana i taua mahi.

  1. Mena ka mohio tatou ki nga wahitau tuuturu i mua i te tukunga, i te wa o nga kaihautu node, katahi ka taea e tatou te whakaputa i te waehere Scala me nga wahitau tuuturu me te whakahaere i te hanga i muri mai (e mahi ana i nga tirotiro taima katahi ka whakahaere i te huinga whakamatautau whakauru). I tenei keehi ka mohiotia to maatau mahi mapi ka taea te ngawari ki tetahi mea penei i te a Map[NodeId, NodeAddress].
  2. I etahi wa ka whiwhi tatou i nga wahitau tuuturu i muri mai ka tiimata te tiimata, karekau ranei he wahitau o nga pona kaore ano kia tiimata. I tenei take, tera pea he ratonga rapu ka timata i mua i era atu pona katoa ka panui pea ia pona tona wahi noho i taua ratonga me te ohauru ki nga whakawhirinakitanga.
  3. Mena ka taea e taatau te whakarereke /etc/hosts, ka taea e tatou te whakamahi i nga ingoa kaihautu kua tautuhia (penei my-project-main-node a echo-backend) ka hono noa tenei ingoa ki te wahitau ip i te wa tuku.

I roto i tenei panui kaore matou e korero mo enei keehi mo etahi atu korero. Inaa, i roto i ta maatau tauira taakaro he rite nga wahitau IP katoa - 127.0.0.1.

I tenei pou ka whakaarohia e rua nga whakatakotoranga punaha tohatoha:

  1. Ko te whakatakotoranga node kotahi, kei reira nga ratonga katoa ka tuu ki runga i te node kotahi.
  2. E rua te whakatakotoranga node, kei reira te ratonga me te kiritaki kei runga i nga waahanga rereke.

Ko te whirihoranga mo a kōpuku kotahi e whai ake nei te whakatakotoranga:

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

I konei ka hangahia e matou he whirihoranga kotahi e toro atu ana i te whirihoranga tūmau me te kiritaki. Ka whirihorahia e matou he kaiwhakahaere huringa ora ka mutu te kaihoko me te tūmau i muri mai lifetime ka hipa te waahi.

Ka taea te whakamahi i te huinga rite o nga whakatinanatanga ratonga me nga whirihoranga ki te hanga tahora o te punaha me nga waahanga e rua motuhake. Me hanga noa tatou e rua nga whirihora node motuhake me nga ratonga e tika ana:

E rua nga 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"
  }

Tirohia me pehea e tohu ai i te whakawhirinaki. Ka whakahuahia e matou te ratonga i whakaratohia e tetahi atu node hei whakawhirinakitanga o te node o naianei. Ka takina te momo ti'aturi na te mea kei roto te momo phantom e whakaahua ana i te kawa. A i te wa whakahaere ka whiwhi tatou i te id node tika. Koinei tetahi o nga waahanga nui o te huarahi whirihoranga e whakaarohia ana. Ka whakawhiwhia ki a maatau te kaha ki te tautuhi i te tauranga kia kotahi anake ka whakarite kei te tohutoro te tauranga tika.

E rua nga waahanga whakaurunga

Mo tenei whirihoranga ka whakamahia e matou nga mahinga ratonga rite tonu. Karekau he huringa. Heoi, ka hangaia e matou etahi momo whakatinanatanga node e rua kei roto he huinga 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 whirihora taha tūmau anake. Ko te pona tuarua ka whakatinana i te kiritaki me te hiahia ki tetahi atu waahanga o te whirihora. Ko nga pona e rua e hiahia ana ki etahi tohu mo te oranga. Mo nga kaupapa o tenei node ratonga pou ka whai oranga mutunga kore ka taea te whakakore i te whakamahi SIGTERM, i te wa ka mutu te kiritaki echo i muri i te roanga mutunga o te whirihora. Tirohia te tono timata mō ngā taipitopito.

Te tukanga whanaketanga katoa

Kia kite tatou me pehea te whakarereketanga o tenei huarahi ki te mahi me te whirihoranga.

Ko te whirihoranga hei waehere ka whakahiatohia ka puta he toi. Te ahua nei he mea tika ki te wehe i nga taonga whirihoranga mai i etahi atu taonga toi waehere. I te nuinga o nga wa ka taea e tatou te maha o nga whirihoranga i runga i te turanga waehere kotahi. A ko te tikanga, ka taea e tatou te maha o nga putanga o nga momo peka whirihoranga. I roto i te whirihoranga ka taea e matou te kowhiri i etahi momo momo whare pukapuka ka noho tonu i nga wa katoa ka tukuna e matou tenei whirihoranga.

Ko te huringa whirihoranga ka huri hei huringa waehere. Na me hipoki e te tukanga whakapumautanga kounga ano:

Tikiti -> PR -> arotake -> hanumi -> whakauru tonu -> tuku tonu

Ko nga hua e whai ake nei o te huarahi:

  1. He rite te whirihoranga mo te tauira o tetahi punaha. Te ahua nei karekau he huarahi kia he te hononga i waenga i nga pona.
  2. Ehara i te mea ngawari ki te huri i te whirihoranga i roto noa i te node kotahi. Ko te ahua koretake ki te takiuru me te whakarereke i etahi konae tuhinga. Na ka iti ake te tere o te whirihoranga.
  3. Ko nga huringa whirihoranga iti ehara i te mea ngawari ki te mahi.
  4. Ko te nuinga o nga huringa whirihoranga ka whai i te tukanga whanaketanga ano, a ka paahitia etahi arotake.

Kei te hiahia maatau he putunga motuhake mo te whirihoranga whakaputa? Kei roto pea i te whirihoranga whakangao nga korero tairongo e hiahia ana matou kia kore e taea e te tini tangata. No reira ka pai pea te pupuri i tetahi putunga putunga motuhake me te uru herenga kei roto te whirihoranga whakaputa. Ka wehea e tatou te whirihoranga kia rua nga wahanga - tetahi kei roto nga tawhā tino tuwhera o te hanga me tetahi kei roto te waahanga ngaro o te whirihoranga. Ma tenei ka taea te uru atu ki te nuinga o nga kaiwhakawhanake ki te nuinga o nga tawhā me te aukati i te uru ki nga mea tino tairongo. He ngawari ki te whakatutuki i tenei ma te whakamahi i nga ahuatanga takawaenga me nga uara tawhā taunoa.

momo

Kia kite tatou i te pai me te kino o te huarahi e whakaarohia ana ka whakaritea ki etahi atu tikanga whakahaere whirihoranga.

Ko te mea tuatahi, ka whakarārangihia e matou etahi momo rereke ki nga ahuatanga rereke o te huarahi e whakaarohia ana mo te whirihoranga:

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

Ko te konae Kuputuhi he ngawari ki te whakatika i nga mahi whakatikatika ad-hoc. Ka taea e te kaiwhakahaere o te punaha te takiuru ki te node kua whakaritea, te whakarereke me te whakaara ano i te ratonga. Kaore pea tenei i te pai mo nga punaha nui ake. Kaore he tohu i mahue i muri i te huringa. Ko te huringa kaore e arotakehia e tetahi atu kanohi takirua. He uaua pea ki te mohio he aha te take i puta ai te huringa. Kaore ano kia whakamatauria. Mai i te tirohanga o te punaha tohatoha ka wareware noa te kaiwhakahaere ki te whakahou i te whirihoranga ki tetahi o etahi atu pona.

(Btw, mena ka hiahia koe ki te timata ki te whakamahi i nga konae whirihora tuhinga, me tapiri noa tatou i te parser + validator ka taea ano te whakaputa Config patohia ka nui noa atu hei timata ki te whakamahi i nga whirihora kupu. E whakaatu ana hoki tenei he iti ake te uaua o te whirihoranga wa-whakahiato i te uaua o nga whirihora-a-tuhi, na te mea kei roto i te tuhinga-a-tuhi ka hiahia taatau ki etahi atu waehere.)

Ko te rokiroki o te uara matua-nui he tikanga pai mo te tohatoha i nga tawhā meta tono. I konei me whakaaro tatou mo nga mea e kiia ana he uara whirihoranga me te aha noa nga raraunga. Ka hoatu he mahi C => A => B ko te tikanga ka karanga matou i nga uara rerekee C "whirihoranga", i te mea he maha nga huringa o nga raraunga A - uru noa nga raraunga. Me whakarato te whirihoranga ki te mahi i mua atu i te raraunga A. I runga i tenei whakaaro ka taea e matou te kii ko te huringa o nga huringa ka taea te whakamahi hei wehe i nga raraunga whirihoranga mai i nga raraunga noa. I te nuinga o nga wa ka puta mai nga raraunga mai i tetahi puna (kaiwhakamahi) me te whirihoranga mai i tetahi atu puna (admin). Ko te mahi ki nga tawhā ka taea te whakarereke i muri i te tukanga arawhiti ka piki ake te uaua o te tono. Mo enei tawhā me whakahaere e matou a raatau tikanga tuku, te poroporo me te whakamana, te whakahaere i nga uara he. No reira, hei whakaiti i te uauatanga o te hotaka, he pai ake te whakaiti i te maha o nga tawhā ka huri i te wa whakahaere (me whakakore katoa ranei).

Mai i te tirohanga o tenei pou me wehe tatou i waenga i nga tawhā pateko me te hihiri. Mena ka hiahia te arorau ratonga ki te whakarereke onge o etahi tawhā i te wa whakahaere, ka kiia pea he tawhā hihiri. Ki te kore he pateko, ka taea te whirihora ma te whakamahi i te huarahi e whakaarohia ana. Mo te whirihora hihiko ka hiahiatia etahi atu huarahi. Hei tauira, ka taea te whakaara ano etahi waahanga o te punaha me nga tawhā whirihoranga hou kia rite ki te whakaara ano i nga tikanga motuhake o te punaha tohatoha.
(Ko taku whakaaro iti ko te karo i te whirihora ano i te waa whakahaere na te mea ka piki ake te uaua o te punaha.
He ngawari ake pea te whakawhirinaki ki te tautoko OS mo te whakaara ano i nga tikanga. Ahakoa, kaore pea e taea i nga wa katoa.)

Ko tetahi ahuatanga nui o te whakamahi i te whirihoranga pateko e whakaaro ana te tangata ki te whirihoranga hihiri (kare he take ke atu) ko te wa heke o te ratonga i te wa o te whakahou whirihoranga. Ae, mena ka huri taatau ki te whirihoranga tuuturu, me whakaara ano te punaha kia whai hua ai nga uara hou. He rereke nga whakaritenga mo te waatea mo nga punaha rereke, na reira kaore pea i te mea tino nui. Mena he mea tino nui, katahi ka whakamahere tatou i mua mo te whakaara ano i nga punaha. Hei tauira, ka taea e taatau te whakatinana Ko te AWS ELB te whakaheke hononga. I tenei ahuatanga i nga wa katoa e hiahia ana tatou ki te whakaara ano i te punaha, ka timata tatou i tetahi tauira hou o te punaha i roto i te whakarara, ka huri i te ELB ki a ia, me te tuku i te punaha tawhito ki te whakaoti i nga ratonga o naianei.

Me pehea te pupuri i te whirihoranga ki roto i nga taonga toi whakaputa, ki waho ranei? Ko te pupuri i te whirihoranga i roto i tetahi taonga toi ko te tikanga kua paahitia e tenei whirihoranga te tikanga whakapumautanga o te kounga me era atu taonga. Na ka mohio tetahi he pai te kounga me te pono o te whirihoranga. Engari ko te whirihoranga i roto i te konae motuhake karekau he tohu o wai me te aha i whakarereke ai i taua konae. He mea nui tenei? E whakapono ana matou mo te nuinga o nga punaha whakaputa he pai ake te whirihoranga pumau me te kounga teitei.

Ko te putanga o te taonga toi ka taea te rapu i te wa i hangaia ai, he aha nga uara kei roto, he aha nga ahuatanga ka whakahohea/whakakorehia, ko wai te kawenga mo te whakarereke i ia whirihoranga. Me whakapau kaha ki te pupuri i te whirihoranga i roto i tetahi taonga toi, a he hoahoa hoahoa hei mahi.

Raruraru me ngā huakore

I konei e hiahia ana matou ki te whakanui i etahi painga me te korero mo etahi ngoikoretanga o te huarahi e whakaarohia ana.

painga

Nga ahuatanga o te whirihoranga whakahiato o te punaha tohatoha katoa:

  1. Tirohanga pateko o te whirihoranga. Ma tenei ka nui te maia, ka tika te whirihoranga i nga momo herenga.
  2. Te reo whai rawa o te whirihoranga. Ko te tikanga ko etahi atu huarahi whirihoranga he iti noa ki te nuinga o nga whakakapinga taurangi.
    Ma te whakamahi i te Scala ka taea e tetahi te whakamahi i te whānuitanga o nga ahuatanga reo kia pai ake ai te whirihoranga. Hei tauira, ka taea e tatou te whakamahi i nga ahuatanga ki te whakarato i nga uara taunoa, nga mea hei whakarite i nga waahanga rereke, ka taea e tatou te korero vals i tautuhia kotahi anake i roto i te whanui o waho (MARE). Ka taea te whakamahi i nga raupapatanga kupu, i etahi tauira ranei o etahi karaehe (Seq, Map, etc.).
  3. DSL. He pai te tautoko a Scala mo nga kaituhi DSL. Ka taea e tetahi te whakamahi i enei ahuatanga ki te whakatu i tetahi reo whirihoranga he pai ake, he pai ki te kaiwhakamahi mutunga, kia taea ai e nga kaiwhakamahi rohe te panui te whirihoranga whakamutunga.
  4. Te tapatahi me te whakakotahitanga puta noa i nga pona. Ko tetahi o nga painga o te whirihoranga mo te punaha toha katoa ki te waahi kotahi ko nga uara katoa kua tautuhia kia kotahi, katahi ka whakamahia ano ki nga waahi katoa e hiahia ana matou. Pato ano hoki nga whakapuakanga tauranga haumaru kia mohio kei nga whirihoranga tika katoa ka korero nga pona o te punaha i te reo kotahi. He nui nga whakawhirinakitanga i waenga i nga kohanga ka uaua ki te wareware ki te whakarato i etahi ratonga.
  5. Te kounga teitei o nga huringa. Ko te huarahi whanui mo te whakawhiti i nga whirihoranga ka huri i roto i nga tikanga PR noa ka whakatauhia nga paerewa teitei o te kounga me te whirihoranga.
  6. Huringa whirihoranga tukutahi. I nga wa katoa ka whakarereketia e matou te whirihoranga tuku aunoa ka whakarite kei te whakahouhia nga pona katoa.
  7. Whakamaamatanga tono. Karekau te tono ki te poroporoaki me te whakamana i te whirihoranga me te hapai i nga uara whirihoranga he. Ma tenei ka ngawari te tono whanui. (Kei roto i te whirihoranga ake etahi pikinga uaua, engari he mahi mo te haumaru.) He tino ngawari ki te hoki ki te whirihoranga noa - me tapiri noa nga waahanga kua ngaro. He maamaa ake te tiimata me te whirihoranga whakahiato me te whakaroa i te whakatinanatanga o nga waahanga taapiri ki etahi wa i muri mai.
  8. whirihoranga putanga. Na te mea ko nga huringa whirihoranga ka whai i te tikanga whanaketanga ano, na reira ka whiwhi tatou i tetahi mea toi me te putanga ahurei. Ka taea e maatau te huri i te whirihoranga ki te hiahiatia. Ka taea e taatau te whakatakoto i tetahi whirihoranga i whakamahia i te tau ki muri ka rite tonu te mahi. Ko te whirihoranga pumau ka pai ake te matapae me te pono o te punaha tohatoha. Kua whakaritea te whirihoranga i te wa whakahiato me te kore e ngawari ki te raweke i tetahi punaha whakaputa.
  9. Whakatauira. Ko te angamahi e whakaarohia ana he mea hangai, a ka taea te whakakotahi i nga waahanga ki nga huarahi rereke
    tautoko i nga whirihoranga rereke (whakarite / whakatakotoranga). Ina koa, ka taea te whakatakoto i te whakatakotoranga node kotahi me te tauine nui. He mea tika kia maha nga whakatakotoranga whakaputa.
  10. Whakamatau. Mo nga kaupapa whakamatautau ka taea e tetahi te whakamahi i tetahi ratonga tawai me te whakamahi hei whakawhirinakitanga i runga i te momo ara haumaru. Ko etahi momo whakatakotoranga whakamatautau me nga momo waahanga ka whakakapihia e nga tawai ka taea te pupuri i te wa kotahi.
  11. Te whakamatautau whakauru. I etahi wa i roto i nga punaha tohatoha he uaua ki te whakahaere i nga whakamatautau whakauru. Ma te whakamahi i te huarahi kua whakamaramatia ki te pato i te whirihoranga haumaru o te punaha tohatoha katoa, ka taea e taatau te whakahaere i nga waahanga tohatoha katoa i runga i te tūmau kotahi ma te whakahaere. He ngawari ki te whai i te ahuatanga
    ina karekau tetahi o nga ratonga.

huakore

He rereke te huarahi whirihoranga kua whakahiato mai i te whirihoranga "noa" a kaore pea e pai ki nga hiahia katoa. Anei etahi o nga ngoikoretanga o te whirihora kua whakahiato:

  1. whirihoranga pateko. Kaore pea e pai mo nga tono katoa. I etahi wa ka hiahia kia tere te whakatika i te whirihoranga i roto i te whakaputanga ma te karo i nga tikanga haumaru katoa. Ma tenei huarahi ka uaua ake. Ko te whakahiato me te whakahou ka hiahiatia i muri i te whakarereketanga o te whirihoranga. Koinei te ahuatanga me te pikaunga.
  2. Whakatupuranga whirihoranga. Ina hangaia te whirihora e etahi taputapu aunoa, me whakahiatohia tenei huarahi (ka kore pea e taka). Me whakapau kaha ki te whakauru i tenei waahanga taapiri ki te punaha hanga.
  3. Nga taputapu. He maha nga taputapu e whakamahia ana i enei ra e whakawhirinaki ana ki nga whirihora tuhinga. Ko etahi o ratou
    e kore e tika ina whakahiatohia te whirihoranga.
  4. Me huri te whakaaro. Kei te mohio nga Kaihanga me nga DevOps ki nga konae whirihoranga kuputuhi. Ko te whakaaro o te whakahiato whirihoranga he ahua ke ki a ratou.
  5. I mua i te whakauru i te whirihoranga whakahiato me hiahia he tukanga whanaketanga rorohiko kounga teitei.

He herenga o te tauira kua whakatinanahia:

  1. Mena ka whakaratohia e matou etahi atu whirihora kaore i te tonohia e te whakatinanatanga node, kaore e awhina te kaitoi ki te kite i te whakatinanatanga ngaro. Ka taea te whakatika ma te whakamahi HList Ko nga ADT ranei (nga karaehe keehi) mo te whirihoranga node hei utu mo nga ahuatanga me te Tauira Keke.
  2. Me whakarato e matou etahi papaa ki te konae whirihora: (package, import, object whakapuakanga;
    override defmo nga tawhā he uara taunoa). Ka taea te whakatika i tetahi waahanga ma te whakamahi i te DSL.
  3. I roto i tenei pou kaore matou e hipokina te whirihora hihiko o nga tautau o nga pona rite.

Opaniraa

I roto i tenei pou kua korerohia e matou te whakaaro mo te whakaatu tika i te whirihoranga i roto i te waehere puna ma te momo ara haumaru. Ka taea te whakamahi i te huarahi i roto i nga tono maha hei whakakapi ki te xml- me etahi atu whirihora-a-tuhi. Ahakoa kua whakatinanahia ta maatau tauira ki Scala, ka taea hoki te whakamaori ki etahi atu reo whakahiato (penei i a Kotlin, C#, Swift, etc.). Ka taea e tetahi te whakamatau i tenei huarahi i roto i tetahi kaupapa hou, a, ki te kore e pai, huri ki te huarahi tawhito.

Ko te tikanga, me hiahia te whirihoranga whakahiato i te tukanga whanaketanga kounga teitei. Hei utu ka oati ia ki te whakarato i te whirihoranga pakari o te kounga teitei.

Ka taea te whakawhānui i tenei huarahi i roto i nga huarahi rereke:

  1. Ka taea e tetahi te whakamahi tonotono ki te whakamana i te whirihoranga me te kore i te wa whakahiato mena ka rahua nga herenga arorau-pakihi.
  2. Ka taea te whakatinana i tetahi DSL hei tohu i te whirihoranga i runga i te rohe-hoahoa-kaiwhakamahi.
  3. Te whakahaere rauemi hihiko me nga whakatikatika whirihoranga aunoa. Hei tauira, ina whakatikahia e tatou te maha o nga pona kahui ka hiahia pea tatou (1) kia whiwhi nga pona i te whirihoranga paku whakarereke; (2) kaiwhakahaere tautau ki te whiwhi i nga korero pona hou.

mihi

Ka mihi au ki a Andrey Saksonov, Pavel Popov, Anton Nehaev mo te tuku urupare whakatenatena mo te tauira o tenei pou i awhina i ahau kia marama ake.

Source: will.com