从架构的角度看分布式系统

应用程序架构正在从一个大而全的模型逐步发展为一个更加分布式的模型。这个变化的关键动力来源之一是云计算的到来及因此而拥有的不断增长的计算规模。对于一个主要从事构建与管理所谓大而全的软件的企业(包括其人员与工作流程),要想开发新的分布式系统,则不仅需要重新学习一些过时的设计方法,还需要会将一些新的模式应用到其中。作为其中的一部分,我将从架构的角度详细介绍在过渡到分布式应用程序的过程中将会凸显出来的问题。

  • 调度(Scheduler)与统筹管理(Orchestration management):管理成百上千个实例(instances)需要系统能够无缝地把实例或容器(containers)从一个主机统筹与调度到另一个主机。为了能够处理不断增长的运算规模,工作量的安排与统筹是分布式系统强大与否的一个关键部分。在解决这一领域的问题中,Docker Swarm、Kubernetes、Mesos与Marathon等是比较成功代表性产品。
  • 服务发现(Service Discovery)与注册(Registration):随着基于容器的服务启动或关闭,我们需要一种机制去注册或注销服务,以及在一种能够运行时发现服务端点的机制。像Consul、Zookeeper、etcd、Confd与Eureka都是在这方面的领军产品。
  • 系统状态管理(System State Management)与集群管理(Cluster management):随着集群规模的增长,我们需要更好地去管理集群的系统状态。如每一个服务都在干什么?总共有多少个实例?以及这些实例都工作在哪些主机上?它们的负载怎么样?这些都需要去有效地管理。而要有效地管理它们,就需要集群管理系统能够实时地监控系统的状态。像Docker Swarm Agents、Kubernetes Nodes/Masters、Mesos Slaves与Containership等产品是在这方面比较有代表性的产品。
  • 数据存储:容器的存储周期是短暂的,这就意味着需要在容器生命周期之外的数据需要在外部进行保存。像Docker Volume Plugin、Flocker、Kubernetes Persistent volumes等产品是在这方面比较成功的领军产品。
  • 网络:由于每个容器可能运行在不同的进程中,所以我们不仅需要管理容器,有时还要根据服务间的访问权限进行相应的隔离。因为有可能多个容器运行在同一主机中,所以需要通过在网络上创建安全组(security groups)以实现容器间的隔离。另一方面,一个容器可能还需要发现运行在不同主机上的服务,实现跨主机地访问。此类产品中像Flannel、Weaveworks与Calico是其中的佼佼者。
  • 监控、审核与日志:由于数以千计的容器在同时运行,对每一个容器进行监控、审核与日志记录将成为一个严重问题。数据与日志要从每一个容器中取出以以便分析。在这一领域,Loggly、Fluentd、log entries、datadog与ELK stack是比较值得关注的产品。

除了上述问题,当构建一个分布式应用程序时,还需要考虑容器的操作系统与容器的运行时环境。其它诸如程序运行时环境、部署管理、DNS、安全问题、SSO/OAUTH、API网关、断路器(Circuit breakers)、性能与可扩展性等问题依然需要被解决。

在你的分布式开发生涯中,如果有其它没有被提及但你又认为很重要的分布式应用架构问题,也可以把它们分享出来。

本文的版权归 用户1206709 所有,如需转载请联系作者。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

分布式系统的架构问题

原文地址:https://dzone.com/articles/architecture-concerns-for-distributed-systems

19510
来自专栏CSDN技术头条

用最少的钱,实现工程效率实践

研发团队的工程效率实践,现在越来越多的人开始谈论这个话题,但是真真能实操的还本场 Chat 侧重于实践,不会有抽象的概念和理论知识。

1073
来自专栏沈唁志

浅谈PHP程序员的前程未来

1404
来自专栏Java社区

【五一福利】Java程序员编程学习之路资源合集

1513
来自专栏小俊博客

【区块链】BonusCloud正式开放注册

BonusCloud 是一个分布式边缘计算网络,可以允许大家使用 ARM v7/v8 架构的路由器设备,刷 Merlin (梅林)软件中心版,离线安装路由器插件...

4962
来自专栏pangguoming

比较全的OA系统功能模块列表

如何判断一款协同OA软件,是否智能,是否注重细节,是否足够成熟呢?产品的设计优势、功能特性,需要我们总结,也需要让更多的用户了解。功能到底强在哪里?下文中将给出...

7987
来自专栏JackieZheng

Nodejs学习笔记(一)——初识Nodejs

前言:目前工作的分内之事相对较为单一,希望可以通过工作之余的时间给自己充充电,只是没有一个学伴或大神带,只能说是摸索着前进。起初准备好好研究下Spring这个框...

2347
来自专栏非著名程序员

吐血推荐:这个开源工具你值得拥有,让你轻松面对各种调试

前天晚上分享了一篇国人把 GitHub 玩出新高度的文章,培训机构的学员为了找工作买卖 GitHub 账号,很多人说:其实面试的时候,只要深度一点的询问,一问就...

591
来自专栏phodal

如何运营一个开源项目并取得较大影响力?

开源需要一些营销的技巧,这些技巧可以帮你吸引关注。举个简单的例子,司徒正美的 avalon 框架出身得很早,也 MV* 方面也做得很不错,但是在 marketi...

62512
来自专栏北京马哥教育

小白用Python | 桑心病狂,试试把报警信息发到微信上

? 前言 笔者所在公司项目的报警信息会通过钉钉发送到群组或个人,这样如果服务出现了问题我们都会第一时间收到提醒并进行处理。 某日从钉钉收到报警信息的我突发奇想...

3567

扫码关注云+社区