微服务——将应用程序分解为更小、可组合的、协同工作的组件——正像城里最热门的新餐厅一样备受关注。(如果您还不熟悉,请在继续阅读之前深入了解什么是微服务。)
但是,如果您已经从“Hello, World”和运行少量微服务发展而来,并且正在构建数百个微服务并运行数千个实例,那么您就会知道它们绝非“微小”。您希望在用户增加时实例也增加,并在用户减少时实例也减少。您希望在实例之间有效地分配请求。您希望智能地构建和运行您的服务。您需要清楚地了解正在运行或即将关闭的服务实例。您如何管理所有这些复杂性?
本文着眼于微服务生态系统中的一些关键术语,以及一些可用于构建微服务架构的开源软件。重点是构建和管理高规模微服务网络,并解决在没有故障的情况下运行服务以及根据业务需求正确扩展的挑战。
这是一份丰盛而奢华的开源美食,肯定会让您在美食上和“微服务”上都感到满意。我相信我遗漏了该领域的一些开源应用程序;请在评论中告诉我。
[在此处下载此速查表的 PDF 版本]
容器
部署应用程序的正确方法是在容器中。简而言之,容器是一个微型虚拟服务器,其中包含运行应用程序所需的软件。容器包体积小、智能且易于部署和维护。在容器中部署应用程序是明智的。您可以根据需要部署任意数量的实例,并根据需要向上或向下扩展以满足当前负载。
开源容器
软件 | 代码 | 许可证 |
---|---|---|
rkt | GitHub | Apache License 2.0 |
Docker | GitHub | Apache License 2.0 |
FreeBSD Jail | GitHub | FreeBSD License |
LXC | GitHub | GNU LGPL v.2.1 |
OpenVZ | GitHub | GNU General Public License v2.0 |
容器编排器
如果您有数百或数千个部署在容器上的服务实例,则需要一种好的方法来管理它们。容器编排是部署和管理所有这些容器的正确解决方案。编排器可以跨越;向上、向下或向外扩展;管理更高或更低的负载;调节添加、删除和失效的容器;以及更多。
开源容器编排器
软件 | 代码 | 许可证 |
---|---|---|
Kubernetes | GitHub | Apache License 2.0 |
OpenShift | GitHub | Apache License 2.0 |
Nomad | GitHub | Mozilla Public License 2.0 |
LXD | GitHub | Apache License 2.0 |
API 网关
API 网关是一个看门人,用于控制和监控对您的应用程序的 API 调用。API 网关有三个关键角色
- API 数据和管理:API 列表、API 订阅、API 文档、社区支持
- API 视角和计费:分析、指标、计费
- API 控制和安全:订阅调用者管理、速率控制、阻止、数据转换、生产和沙箱支持、密钥管理
API 网关通常是多租户解决方案,用于在同一网关上部署多个应用程序。
开源 API 网关
并非所有以下 API 网关都支持上述所有功能,因此请根据您的需求进行选择。
软件 | 代码 | 许可证 |
---|---|---|
3scale | GitHub | Apache License 2.0 |
API Umbrella | GitHub | MIT License |
Apigee | GitHub | Apache License 2.0 |
Apiman | GitHub | Apache License 2.0 |
DreamFactory | GitHub | Apache License 2.0 |
Fusio | GitHub | GNU Affero General Public License v3.0 |
Gravitee | GitHub | Apache License 2.0 |
Kong | GitHub | Apache License 2.0 |
KrakenD | GitHub | Apache License 2.0 |
Tyk | GitHub | Mozilla Public License 2.0 |
CI/CD
持续集成 (CI) 和持续部署(CD;也可能代表持续交付)是构建和运行流程的流程总和。CI/CD 是一种理念,可确保您的微服务被正确构建和运行,以满足用户的期望。自动化是 CI/CD 的关键因素,使构建和运行过程变得简单且结构化。CI 的主要流程是构建和测试,CD 的主要流程是部署和监控。
下面列出的所有 CI/CD 工具和平台都是开源的。我不包括为托管开源而免费的 SaaS 平台。GitHub 也没有在此列表中,因为它不是开源的,也没有内置的 CI/CD;它而是使用第三方 CI/CD 产品集成。GitLab 是开源的,并且具有内置的 CI/CD 服务,因此它在此列表中。
开源 CI/CD 工具
软件 | 代码 | 许可证 |
---|---|---|
Jenkins | GitHub | MIT License |
GitLab | GitLab | MIT License |
Buildbot | GitHub | GNU General Public License v2.0 |
Concourse | GitHub | Apache License 2.0 |
GoCD | GitHub | Apache License 2.0 |
Hudson | GitHub | MIT License |
Spinnaker | GitHub | Apache License 2.0 |
负载均衡器
当您的请求数量扩展时,您必须部署应用程序的多个实例并在这些实例之间共享请求。管理实例之间请求的应用程序称为负载均衡器。负载均衡器可以配置为基于轮询调度、IP 路由或其他算法来分配请求。当添加新实例(以支持更高的负载)或停用实例(当负载缩小时)时,负载均衡器会自动管理请求分配。会话持久性是另一个负载均衡功能,可在需要时将新请求重定向到先前的实例(例如,为了维护会话)。有基于硬件和基于软件的负载均衡器。
开源负载均衡器
软件 | 代码 | 许可证 |
---|---|---|
HAProxy | GitHub | HAPROXY 的许可证 / GPL v2.0 |
Apache 模块 (mod_athena, mod_proxy_balancer) | SourceForge 或 Code.Google 或 GitHub |
Apache License 2.0 |
Balance | SourceForge | GNU General Public License v2.0 |
Distributor | SourceForge | GNU General Public License v2.0 |
GitHub Load Balancer (GLB) Director | GitHub | BSD 3-Clause License |
Neutrino | GitHub | Apache License 2.0 |
OpenLoBa | SourceForge | 未知 |
Pen | GitHub | GNU General Public License, v2.0 |
Seesaw | GitHub | Apache License 2.0 |
Synapse | GitHub | Apache License 2.0 |
Traefik | GitHub | MIT License |
服务注册和服务发现
当部署了数百或数千个服务实例并相互通信时,考虑到部署点随着服务的扩展和缩减而动态变化,请求服务如何知道如何连接正确的响应服务?服务注册和服务发现服务解决了这个问题。这些系统本质上是维护配置信息和命名并提供分布式同步的键值存储。
开源服务注册和发现服务
软件 | 代码 | 许可证 |
---|---|---|
Baker Street | GitHub | Apache License 2.0 |
Consul | GitHub | Mozilla Public License 2.0 |
etcd | GitHub | Apache License 2.0 |
Registrator | GitHub | MIT License |
Serf | GitHub | Mozilla Public License 2.0 |
ZooKeeper | GitHub | Apache License 2.0 |
监控
当您的微服务及其实例满足用户需求时,您需要保持对其性能的良好视图。监控工具来救援!
开源监控工具和软件有多种风格,有些仅比 top 稍好一些。其他选项包括特定于操作系统的;企业级;提供完整集成的工具集合;仅执行一项操作的工具,仅监控或报告或可视化并与第三方工具集成;以及监控特定或多个组件(例如网络、日志文件、Web 请求和数据库)的工具。监控工具可以是基于 Web 的工具或独立工具,通知选项范围从被动报告到主动警报。
选择一个或多个这些工具,以享受您的微服务网络的美味体验。
开源监控软件
软件 | 代码 | 许可证 |
OpenNMS | GitHub | GNU Affero General Public License |
Grafana | GitHub | Apache License 2.0 |
Graphite | GitHub | Apache License 2.0 |
Icinga | GitHub | GNU General Public License v2.0 |
InfluxDB | GitHub | MIT License |
LibreNMS | GitHub | GNU General Public License v3.0 |
Naemon | GitHub | GNU General Public License v2.0 |
Nagios | GitHub | GNU General Public License v2.0 |
ntop | GitHub | GNU General Public License v3.0 |
ELK | GitHub | Apache License 2.0 |
Prometheus | GitHub | Apache License 2.0 |
Sensu | GitHub | MIT License |
Zabbix | 自托管仓库 | GNU General Public License v2.0 |
Zenoss | SourceForge | GNU General Public License v2.0 |
正确的配料
纯开源解决方案可以为大规模部署和运行微服务提供<0xC2><0xA0>正确的配料。我希望您发现它们美味、令人满意、饱腹,最重要的是,微服务化!
2 条评论