一个专注的独立服务
一项明确的职责,例如支付或通知,拥有自己独立的代码库,而不是共享代码库中的一部分。
微服务开发工程师搭建的是一个更大系统中能正常工作的一部分,而不是一次性搭建整个系统。AWS 把微服务描述为由独立组件构建而成的应用,每个组件运行自己的进程,通过定义清晰的 API 通信,这也恰好概括了迪拜企业在迪拜聘请微服务开发工程师时所得到的:一个人端到端负责一个服务,例如支付、通知或搜索,能够在不触碰系统其他部分的情况下独立部署或扩容这项服务。
这种独立性也正是这个角色存在的原因。AWS 指出,在一个单体应用中,某一部分需求的激增会迫使整个应用一起扩容,而单个进程的故障可能拖垮整个系统。微服务开发工程师的工作,就是为自己负责的那部分系统,搭建一个能避免这两个问题的服务:它能在需要时独立扩容,出问题时也只会影响它自己这一项功能,而不会把系统其他部分一起拖垮。
这个角色搭建什么
在更大系统内部,把一个服务搭建到位。
一项明确的职责,例如支付或通知,拥有自己独立的代码库,而不是共享代码库中的一部分。
把服务打包成无论部署到哪里都能一致运行的形式,使用一个把代码与其运行所需内容捆绑在一起的容器镜像。
正确调用其他服务,无论是通过直接的 API 调用还是事件,并在对方短暂不可用时给出合理的处理方式。
超时、重试和合理的降级方案,让一个变慢或失败的服务不会悄悄把其他服务一起拖垮。
在不重新部署整个系统的情况下,把一次变更发布到某一个服务,出问题时也能单独回滚。
一个拥有自己的自动化测试和健康检查的服务,而不是依赖更大系统的测试来发现自己的问题。
重要技能
在一个更大系统中做好一个优秀成员,所需要的专项技能。
| 技能或工具 | 优秀表现是什么样的 | 为什么重要 |
|---|---|---|
| 容器 | 能够熟练地在容器中构建和运行服务,最常见的是使用 Docker | Docker 自己的文档把容器描述为一种轻量、隔离、能一致运行应用的方式,这正是今天微服务的标准打包方式 |
| 单个服务的 API 设计 | 即便是一个小服务,也能为自己的服务设计一套清晰、有完整文档的接口 | 其他服务和团队会在看不到背后代码的情况下依赖这个接口 |
| 服务间的故障处理 | 把超时和降级方案当作标准做法内置进去,而不是等生产环境出问题之后才补上 | 服务间故障处理薄弱的微服务系统,出问题的方式可能比单体应用还糟糕 |
| 数据归属 | 理解为什么每个服务通常应该拥有自己的数据,以及随之而来的取舍 | 跨服务共享数据库,会悄悄重新引入微服务原本就是为了消除的那种耦合 |
| 范围把控 | 让一个服务始终专注于单一职责,而不是任其膨胀成第二个单体 | 一个不断承接新职责的服务,会违背当初把它拆分出来的初衷 |
Docker 自己的文档把容器描述为镜像的一个可运行实例,在操作系统层面隔离,比传统虚拟机轻得多,而这正是微服务开发工程师在项目第一天之前就应该熟练掌握的打包方式。
合作方式
专属微服务开发工程师适合有持续运营系统、不断需要新增服务的企业。限定范围项目适合按明确规格搭建一到两个指定服务,并在最后交付测试和文档。招聘支持适合希望在整体架构确定后,把微服务开发工程师直接招进自己团队的企业。咨询服务适合已有开发人员在搭建服务、希望获得关于这些服务实际隔离程度评审的企业。
评估候选人
能揭示一个服务是否真正独立、而不只是在纸面上被拆开的检查方式。
它做什么,依赖什么,以及当其中一项依赖短暂不可用时发生了什么。仅凭这一个问题,就能看出根据这位候选人聘请微服务开发工程师是否合理。
为什么那一小块功能会独立成一个服务,而不是留在另一个服务里,这能揭示出真实的设计思考。当您为一个仍在成形中的系统在迪拜聘请微服务开发工程师时,这一点值得仔细追问。
故障是仅限于那一个服务,还是扩散开来了,这很能说明他们过去的作品实际隔离得有多好。
询问那个服务是拥有自己的数据,还是与其他服务共享数据库,以及为什么,因为这是一个常见的日后会带来麻烦的捷径。
请他们描述今天是如何打包和部署一个服务的,留意具体、贴近当下实践的细节,而不是笼统的描述。这是在为超出第一个原型的工作在迪拜聘请微服务开发工程师之前,一个快速、实用的筛选方式。
认证
存在少量相关的、由供应商提供的证书。
Docker 和各大云服务商都有自己的认证路径,覆盖容器,某些情况下也覆盖编排。这些是对工具熟悉程度的合理信号,但不能证明良好的服务设计能力。
他们搭建过的一个真实服务,附带可运行的测试套件,以及在某项依赖失败时仍能保持运行的证据,比证书更能说明问题。在聘请微服务开发工程师时,请直接索取这些证据。
阿联酋考量
服务层面的数据归属,以及每个服务实际运行在哪里。
阿联酋的联邦数据保护法覆盖通过电子方式处理的个人数据,无论处理发生在哪里。由于每个微服务可能拥有自己的一部分数据,微服务开发工程师应该清楚哪些服务实际持有个人数据,而不是想当然地认为那是别人的责任。
多家主要云服务商都为容器和编排服务提供阿联酋区域。请微服务开发工程师确认每个服务部署在哪个区域,因为这会影响延迟,也影响该服务的数据存放位置,这是您在为任何面向客户的项目在迪拜聘请微服务开发工程师那一刻起就值得核实的事项。
直接解答
一个职责清晰的服务,例如处理支付或发送通知,被打包成可以独立部署和扩容,而不需要连带重新部署系统其他部分。
有所重叠,但微服务开发工程师专门在一个已经拆分为多个服务的系统内工作,涉及相应的容器化、部署和服务间通信。对于较小的产品,单体式的后端往往更适合用更简单、非微服务的方式来搭建。
是独立的。微服务是否适合您的产品,是一个架构决策,在我们的微服务架构师页面有详细说明。这个角色假设该决策已经做出,或正在与微服务架构师一起制定,重点在于把服务本身搭建好。
容器,最常见的是通过 Docker,一旦服务数量多到需要自动扩容和恢复,通常还会用到 Kubernetes 这类编排平台。
可以,尤其是在项目初期。随着服务数量增加,大多数企业会把归属权分散给不止一位开发工程师,让每个服务都有明确的负责人,而不是让一个人成为瓶颈。
资料来源
书面固定价格
已收到,我们正在为您撰写报价。
工作时间内您将在 45 分钟内收到。请查收确认邮件。