微服务开发实战

微服务器开发检查清单

2021-06-08  本文已影响0人  老瓦在霸都

基本问题

  1. 这个服务的职责和边界是什么?
  2. 如何自动从代码到产品来构建这个服务?
  3. 如何自动部署,运行,停止,升级和扩展这个服务?
  4. 这个服务使用什么数据存储系统? SQL or NoSQL
  5. 这个服务与其他服务之间通信的方式是什么?
  6. 这个服务依赖哪些其他服务? 又被哪些服务所依赖?其拓扑结构如何?
  7. 这个服务会不会存储敏感数据?如果会,有没有加密,密钥如何管理的?
  8. 这个服务会开放给最终用户使用,还是仅仅在内部使用?
  9. 如何单独测试这个服务? 以及如何与其他服务一起整体进行测试?
  10. 这个服务依赖于哪个平台, 如何利用其服务治理功能?

还有更多的问题需要一一检查:

操作系统

Linux: CentOS 是首选, Ubuntu 或 Redhat 其他系统亦可,不推荐 windows 作为服务器的宿主系统

编程语言

线程模型:

在服务器内部可以划分为如下线程

度量框架

我们需要度量如下的关键指标

而度量代码本身应该是非侵入式的,且对资源的消耗低,不影响主要的业务流程。

高可用机制

可用性和一致性的权衡

CAP 理论上是不可同时满足的, 而分布式系统中 Partial Failure 是不可避免的
所以要在Consistence 和 Availability 上做折衷和权衡。

高可性性的指标就是可用时间与总时间之比

availability = uptime/(uptime + downtime)

现在普遍要求可用性至少达到两个九, 最好在四个九以上, 也就是说你的服务要达到如下要求

高扩展性

业务扩展迅速,如何快速扩展以应对高速增长的流量呢

  1. 是否可以通过单纯地增加服务器来应对流量的增长?
  2. 是否可以进行水平和垂直拆分?例如 DB sharding, 根据业务实体的主键进行分库分表

安全性

还有对于用户隐私的保护

例如密码必须经过不可逆的哈希之后再存储在数据库中, 个人的邮件, 电话等信息均不可存放在日志文件中, 只可以放在有访问限制的数据管理系统中

API

网络工具包

我们在选择框架和软件工具包应该遵循 4L 原则

例如,Java 的 Netty 和 C++ 的 Boost 都满足上述原则

以 Java Netty 为例

以 Boost asio 的设计为例

特性 说明
可移植性 该库应支持一系列常用的操作系统,并在这些操作系统之间提供一致的行为。
可扩展性 该库应促进可扩展到数千个并发连接的网络应用程序的开发。每个操作系统的库实现应使用最能实现此可伸缩性的机制。
效率 该库应支持散布式聚集I / O等技术,并允许程序将数据复制减至最少。
来自已建立的API的模型概念 例如BSD套接字。 BSD套接字API得到了广泛的实现和理解,并且在许多文献中都有涉及。其他编程语言通常将类似的接口用于网络API。在合理的范围内,Boost.Asio应该利用现有做法。
使用方便 该库应采用工具包而非框架方法,从而为新用户提供一个较低的入门障碍。就是说,它应该在学习一些基本规则和准则的情况下,设法及时减少前期投资。之后,库用户只需要了解所使用的特定功能。
进一步抽象的基础 该库应允许开发提供更高抽象级别的其他库。例如,常用协议(例如HTTP)的实现。

参考资料

上一篇下一篇

猜你喜欢

热点阅读