分布式系统的微服务架构设计要点

随着应用程序体系架构的不断发展,从大整体monolith时代进入更为基于模型的分布式设计时代,构建新的分布式系统需要重新学习一些旧的设计技术,并采用一些新的模式。

下面是几个设计关注点:
1.调度/业务流程管理,从管理数百个实例到管理成千上万的实例需要跨主机的无缝方式统筹安排服务实例/Docker的能力。为了处理越来越大的规模系统,工作负载调度/业务流程管理成为分布式系统的一个关键组成部分。该部分产品有 Docker Swarm, Kubernetes, Mesos, Marathon。

2.服务发现和注册,基于容器的服务常常启动和关闭,需要有一个机制来注册或取消注册服务,同时提供运行时自动发现新服务端点的机制,产品有Consul, Zookeeper, etcd, Confd, 和 Eureka,大部分这些产品支持根据请求流量对服务进行负载平衡。

3.系统状态管理/集群管理:当集群规模增长时,需要管理集群状态,每个服务的SRV是什么?有多少服务实例?在什么主机上,服务的负载是多少,这些都是状态管理,需要一个集群管理系统跟踪系统的这些状态,产品有Docker Swarm Agents, Kubernetes Nodes/Masters, Mesos Slaves, Containership。

4.数据存储,容器存储是短暂的,意味着数据需要跨越容器的生命周期进行永久保存,产品有:Docker Volume Plugin, Flocker, Kubernetes Persistent volumes

5.网络,每个容器运行不同的进程,需要管理隔离不同的容器服务,多个容器运行咋同样主机上,这样共享网络资源需要一种安全的分组策略来隔离容器,同时,容器也要发现所在主机的服务,或跨主机寻找服务,需要一种简单模型实现这些,产品有:
Flannel, Weaveworks, 和 Calico

6.监测/审核/日志。数千个容器运行,监测 审核和日志每个容器成为非常棘手问题,数据日志记录需要从每个容器中拉出来进行分析,产品有: Loggly, Fluentd, log entries, datadog, 和 ELK stack

其他:DNS, Security, SSO/OAuth, API Gateway, 断路器Circuit breakers, 性能和扩展性模式等等都需要考虑。

Architecture Concerns for Distributed Systems - DZ