构建微服务时,我们用到的库

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 本文讲的是构建微服务时,我们用到的库【编者的话】构建微服务时,究竟该不该使用库,又有那些代码适合写作库?这里是作者的一些经验之谈。
本文讲的是构建微服务时,我们用到的库【编者的话】构建微服务时,究竟该不该使用库,又有那些代码适合写作库?这里是作者的一些经验之谈。

正如其他通用的解决方案一样,微服务架构也有自己的优劣;有些东西因它变的更简单,同时另一些东西却变的更复杂。当转换到微服务的时候,最常见的挑战就是在哪里使用共享代码的问题。

起初,把常见代码转换成独立库的这种做法听起来很不错。原因很简单,一般我们要在两个文件中用到相同代码的时候,就会把这段代码写成一个函数,而写成库则是在更高层次上达到相同的作用,何乐而不为呢?

但是并非我们想象中那么简单。共享库会造成微服务之间的强依赖,因此应该事先考虑清楚这些为服务在整个服务群中所扮演的角色后再做决定。我在加入Runnable之后亲身经历过这类问题。

举个例子,假设你把域模型抽象进了一个库中,一旦对该模型进行修改,你必须同时更新所有使用这个库的服务。这包括更新代码,通过review,测试,staging等等。这样一来,微服务构架就变成了一个死板的整体。

那么,是不是说微服务就不能和库共存了呢?并不是。Philipp Hauer在 他的文章 中曾解释过一些关于微服务和共享库的特例。

在技术问题(technical concerns)上,使用库是okay的(比如,日志和监控),因为业务需求往往对这些问题没什么影响。
这一点很重要。微服务一般可以分为两类代码:
  1. 域特定代码(Domain specific code)。这类代码针对服务需要处理的问题。比如,所有的业务逻辑和域模型都是这类代码。
  2. 支持代码(Support code),也就是Philipp Hauer所提到的技术问题。就我自己的经验来说,微服务代码中很大一部分都属于支持代码,所以我们应当花点时间来考虑如何更好的组织这些代码。

在Runnable,我们用到了一些库。其中一些是内部开发的,一些则是第三方代码。这些库是我们建立新的微服务的基石。

下面列出一些与我们的一些库相关的技术问题:
  • 监控(monitor dog)——以标准化方式向Datadog报告数据;例如,在每个时间前加上服务名作为前缀。
  • 错误处理(error cat)——提供错误层级结构,该结构由所有服务继承并向Rollbar报告错误。
  • 配置(loadenv)——保证每个微服务都以同种方式加载环境变量。
  • worker服务器(ponos)——包含标准监控和错误报告的常规worker服务器。
  • Docker/Swarm 客户端(loki)——包含标准监控的Docker/Swarm客户端库。
  • 正确性检查(joi)——针对邮箱地址、日期等的正确性检查库。

结论

要正确辨别你的代码中是否需要用到库,这很重要。

这里有几个一般性的经验法则:
  • 如果这段代码中包含业务逻辑或者域特定代码——那这段代码就不应转换为库。
  • 如果这段代码会因新的需求频繁变动——那它也不适合作为库。
  • 如果这段代码会造成消费者间的耦合——它也不适合作为库。

如果以上问题都没有,那就放心去做吧!将一般性的代码转换成独立的库可以加快新服务的开发,因为这样你可以将精力集中在服务需要解决的特定问题上。另外,使用库函数还可以让所有模块的监控、错误处理、和管理配置变得标准一致。

原文链接:Libraries We Use When Building Microservices(翻译:马远征)

原文发布时间为:2016-09-30

本文作者:马远征

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:构建微服务时,我们用到的库

相关文章
|
11天前
|
消息中间件 监控 网络协议
构建高效微服务通信:选择合适的通信方式
构建高效微服务通信:选择合适的通信方式
|
7天前
|
负载均衡 监控 API
构建高效微服务架构:后端开发的新趋势
【7月更文挑战第43天】 在当今软件开发领域,微服务架构已成为推动技术创新与实现业务敏捷性的一股不可忽视的力量。本文旨在深入剖析构建高效微服务架构的核心原则、关键技术和实践挑战,为后端开发者提供一套行之有效的解决方案。通过精心设计的模块化服务、智能的服务发现机制、弹性的负载均衡策略以及持续的性能优化实践,我们能够确保系统的可扩展性、稳定性及快速响应市场变化的能力。文章将详细探讨如何通过容器化技术、服务网格、API网关等现代工具和框架,来构建和维护一个高效的微服务系统。
|
19天前
|
运维 Kubernetes Cloud Native
云原生之旅:构建微服务架构的实用指南
【7月更文挑战第31天】随着云计算技术的不断演进,云原生已经成为现代软件开发的重要趋势。本文将通过一个实际案例,引导读者了解如何在云平台上利用云原生技术构建和部署微服务架构。文章不仅提供理论指导,还结合代码示例,帮助开发者深入理解云原生应用的开发与运维流程。
43 11
|
14天前
|
前端开发 API 数据库
构建领域驱动的微服务
构建领域驱动的微服务
30 3
|
18天前
|
设计模式 数据管理 持续交付
构建高效微服务架构:后端开发的新趋势
【7月更文挑战第32天】 在当今快速迭代的软件开发领域,微服务架构已经成为一种流行的设计模式,它通过将应用程序分解为一组小型、松散耦合的服务来增强系统的可维护性与扩展性。本文深入探讨了构建高效微服务架构的核心原则和实践方法,旨在为后端开发人员提供一套清晰的指引,帮助他们在构建现代化、灵活且可伸缩的系统时做出明智决策。我们将从服务划分策略、通信机制、数据管理到部署方式等多个维度展开讨论,并分享最佳实践和常见陷阱,以便读者能够有效规避风险,提升开发效率。
|
4天前
|
安全 Nacos 数据库
【技术安全大揭秘】Nacos暴露公网后被非法访问?!6大安全加固秘籍,手把手教你如何保护数据库免遭恶意篡改,打造坚不可摧的微服务注册与配置中心!从限制公网访问到启用访问控制,全方位解析如何构建安全防护体系,让您从此告别数据安全风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其公网暴露可能引发数据库被非法访问甚至篡改的安全隐患。本文剖析此问题并提供解决方案,包括限制公网访问、启用HTTPS、加强数据库安全、配置访问控制及监控等,帮助开发者确保服务安全稳定运行。
11 0
|
4天前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
16 0
|
11天前
|
监控 安全 API
构建高效微服务架构:后端开发的新范式
【7月更文挑战第38天】随着现代软件开发的复杂性增加,传统的单体应用架构已经难以满足快速迭代和灵活部署的需求。微服务架构以其模块化、独立性和可伸缩性成为解决这一问题的关键。本文将探讨微服务的核心概念、设计原则以及在实现过程中可能遇到的挑战,并提供相应的解决方案,以期为后端开发者提供一种新的开发范式,帮助他们构建出更加高效、稳定且易于维护的系统。
|
11天前
|
监控 供应链 安全
构建高效微服务架构:API网关与服务熔断策略
【7月更文挑战第38天】随着现代应用程序向微服务架构的转型,系统的稳定性和效率成为了开发团队关注的焦点。本文将探讨在微服务环境中实现系统可靠性的关键组件——API网关,以及如何在服务间通讯时采用熔断机制来防止故障蔓延。通过分析API网关的核心功能和设计原则,并结合熔断策略的最佳实践,我们旨在提供一套提高分布式系统弹性的策略。
|
13天前
|
敏捷开发 负载均衡 数据管理
构建高效后端系统:微服务架构的实践与挑战
在数字化浪潮中,企业追求的不仅是技术的更新换代,更是系统架构的革新以适应快速变化的市场需求。微服务架构作为现代软件开发的佼佼者,其灵活性和可扩展性被无数开发者所推崇。本文将深入探讨微服务架构的核心概念、实践方法以及面临的主要挑战,旨在为读者提供一份详实的微服务实施指南,同时引发对传统架构转型的深层思考。
24 0