利用微服务构建现代应用(二)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
MSE Nacos 企业版免费试用,1600元额度,限量50份
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 本文讲的是利用微服务构建现代应用(二),【编者的话】本文是如何用微服构建现代应用的第二部分,介绍了如何用MongoDB中实现微服务,在迁移到微服务之前需要考虑的问题以及使用MongoDB构建微服务架构的客户案例。
本文讲的是利用微服务构建现代应用(二) 【编者的话】本文是如何用微服构建现代应用的第二部分,介绍了如何用MongoDB中实现微服务,在迁移到微服务之前需要考虑的问题以及使用MongoDB构建微服务架构的客户案例。

上一篇博文 中,我介绍了微服务的背景知识及其优势。本文将介绍如何使用MongoDB构建微服务以及在实施微服务的项目中应该要注意的问题。

MongoDB如何实现微服务

企业要享受到微服务的好处需要一些基本的技术原则,其中最主要的是灵活的数据模型、冗余、自动化和可扩展性。

灵活的数据模型 :MongoDB的动态模式是处理微服务和持续交付需求的理想方式。当有新的功能上线需要修改数据模型时,无需修改所有的数据库记录,这对于关系数据库来讲可能需要花费数周。开发人员可以针对迅速变化的环境快速的迭代数据模型,因此提供了更好的灵活性和可以更快的将产品推向市场。

冗余 :微服务的分布式特性造成了更多的失效点,例如更多的网络连接使得微服务的设计需要仔细的考虑冗余性。MongoDB非常适合这一点,因为它通过MongoDB副本提供了内建的冗余性。副本不仅仅提供了更好的错误恢复能力,也通过多数据中心的部署和在同一个数据库集群中隔离业务负载和分析报告负载的功能提供了更好的灾备能力。

监控和自动化 :手动管理少量的服务并不困难,但是当服务的数量增加时,如果没有一个自动化的方式去管理这种复杂性的增加,生产力将会停滞。选择合适的监控和自动化工具对于保证DevOps团队的生产力是非常重要的,尤其是当环境变得复杂时。

MongoDB Ops Manager (同时也作为 云服务 提供)具有可视化、可定制的仪表盘和自动报警功能来帮助管理一个复杂的环境。

Ops Manager可以管理超过100个关键的数据库和系统的健康状况,包括操作计数器、CPU利用率、副本状态和任意节点的状态。这些度量被安全的送到Ops Manager进行处理和可视化。
pic-1.png

图1:Ops Manager提供了MongoDB部署的实时和历史数据的可视化

通过Ops Manager的RESTful API跟已有的监控工具整合,以及通过内置的整合功能跟业界领先的APM(Application Performance Management)平台例如New Relic整合都是非常容易的。这种整合使得可以通过统一的管理界面MongoDB状态和应用基础设施中的其它部分。

可扩展性: 通过扩展来满足新的业务需求是所有IT环境的必备能力,微服务也不例外。MongoDB提供了一整套可扩展的方案可以自动化的在多个节点之间分配和部署数据库,这可以非常容易的满足有动态以及高性能需求的IT基础设施。另外,通过auto-sharding功能(在需要时可以将部署分配到不同的地理域),MongoDB也非常适合在商用硬件上进行横向扩展。这比整体设计、纵向扩展的传统RDBMS来讲是有优势的,因为MongoDB是自动化和透明的。

为了获取更大的商业利益,很多组织正在将微服务迁移到云平台上。云平台的动态特性使得企业可以容易的进行纵向扩展或者收缩同时提供持续的可用性。

在迁移到微服务之前应该考虑的问题

虽然微服务有很多有点,但是它并不是适合所有人。在实施一个微服务项目之前有几个问题需要仔细考虑:

监控: 微服务的一个最重要的挑战是如何有效的监控整个系统。监控一两个服务是很容易的,但是如何有效的监控大量服务则会变得非常具有挑战性。不仅仅是有更多的服务器需要监控,同时也有更多的log文件需要分析,以及更大的可能性发生网络分裂。传统的方式是监控状态例如CPU,内存以及网络延迟等,这也是很重要的,但是企业用户也需要扩展监控能力去了解系统的度量和从一个长时间来看系统的运行情况。自动化监控流程可以帮助应付这些挑战和降低运营的开销。

更高的开发技能需求: 微服务在分布式系统上运行,这意味着更高的复杂性。网络延迟、硬件失效、不可靠的网络、同步以及容错能力都需要细致的和适当的去处理。为了去处理这种增加的复杂性,开发人员需要很强的运营和产品背景。开发人员不再是简单的将开发好的程序交给运维团队即可,开发人员需要理解DevOps、测试和发布之间的关系来设计一个服务。在实现一个微服务架构之前,确定你的团队是否有能力处理这种复杂性是一件非常重要的事情。

更高的运营开销: 对于某个整体性应用,它可能只是需要一个应用服务器集群和几个进程,但是一个微服务应用在增加了冗余之后可能需要50个服务和200个进程。运营和监控所有的这些进程会是一个令人生畏的任务。另外,服务需要通过持续交付线被测试和快速部署,这需要合适的工具和技能。

不正确的服务边界 :在设计阶段就定义合适的服务边界是非常必要的。在从内部组件开始创建服务时,一个常见的问题就是没有很好的考虑服务边界。随着更多的功能被加入,有一种风险就是最终构建了一个巨大的分布式整体性应用。如果服务边界没有被正确的定义,将会增加成本,耦合的服务以及更高的测试复杂性。

MongoDB微服务部署

全世界成千上万的组织在使用MongoDB,包含几乎半数的财富100企业。很多企业在微服务架构中使用MongoDB来达到他们的业务和部署目标。

Comparethemarket.com 是英国一个领先的比价服务提供商,它使用了MongoDB作为其巨大的微服务环境背后的运营数据库。业务可用时间是非常关键的,MongoDB的分布式设计保证了SLA总是能被满足。Comparethemarket.com的部署包含了在AWS上的微服务。每一个微服务或者相关的逻辑分组都有专用的运行在Docker容器里的MongoDB副本,并部署在AWS的不同可用域以提高弹性和高可用性。MongoDB Ops Manager被用来提供运营自动化,这对快速上线新的功能至关重要:部署副本、提供持续的备份和执行无宕机时间的升级。

fuboTV 是北美的一个流媒体服务提供商,提供全世界足球联赛的流媒体,fuboTV使用MongoDB作为其微服务架构的核心数据库。fuboTV的流媒体服务具有极端的突发性,在一个比赛开始前10分钟会是平常的流量的100多倍。为了处理业务增长和软件发布计划的需求,fuboTV将它的MongoDB数据库迁移到了Google云平台中被Kubernetes编排系统管理的Docker容器中。
pic-2.png

图2:fuboTV 微服务架构

这给fuboTV待了带来了更高的灵活性、效率和上线时间。使用Kubernetes管理的容器,fuboTV可以将其所有的环境 – 开发、测试、QA和生产 – 部署到一个物理机集群中。Kubernetes调度器被用来精确的控制所有应用的资源分配,使得fuboTV可以最大化服务器利用率和减少成本。Kubernetes副本控制器可以在某个容器失败时自动的重新调度,从而实现容错和持续可用性。数据冗余是通过MongoDB的副本来实现的。这使得fuboTV在部署和升级应用时可以做到零宕机时间。

OTTO  是德国最大的时尚和生活品零售商,每天客流量有200万。OTTO的一个问题是并行的团队横跨多个业务领域(业务,项目管理,IT),他们会面对不同的问题但是都需要快速的提交结果。所有的团队都独立的选择了MongoDB作为最好的工具来快速和容易的获得结果。使用松耦合的团队,架构和运营,OTTO消除了部署和测试的瓶颈。团队可以快速的和迭代式的修改错误和支持持续交付。MongoDB是OTTO业务、IT和项目管理团队能够快速提交结果、提高开发的灵活性、允许团队无风险的创新的驱动力。

总结

微服务架构相比整体性架构有诸多的优点,但这并不意味着微服务没有挑战。合适的计划和应用的解耦合是能保证微服务架构可以达到你既定目的的前提。MongoDB非常适合微服务架构,MongoDB提供了灵活的模式、冗余、自动化和可扩展性。MongoDB和微服务的协同使用可以帮助组织有效的协调团队、更快的创新和在应用开发与交付的新时代中克服挑战。

学习更多关于MongoDB和微服务的知识,请阅读白皮书 Microservices: The Evolution of Building Modern Applications

原文链接:Building Modern Applications with Microservices: Part 2(翻译:李光成)

======================================================
译者介绍
李光成,IBM中国研究院资深研究员,研究方向是云计算基础设施及技术。目前在做的是Docker资源隔离方面的研究项目。

原文发布时间为:2016-06-14
本文作者:liguangcheng 
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:利用微服务构建现代应用(二)
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
3月前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
249 12
|
4月前
|
机器学习/深度学习 设计模式 API
Python 高级编程与实战:构建微服务架构
本文深入探讨了 Python 中的微服务架构,介绍了 Flask、FastAPI 和 Nameko 三个常用框架,并通过实战项目帮助读者掌握这些技术。每个框架都提供了构建微服务的示例代码,包括简单的 API 接口实现。通过学习本文,读者将能够使用 Python 构建高效、独立的微服务。
|
4月前
|
存储 NoSQL 关系型数据库
微服务——MongoDB的应用场景
随着Web2.0时代的到来,传统关系型数据库(如MySQL)在高并发读写、海量数据存储及高可扩展性需求方面逐渐力不从心。而MongoDB凭借其灵活的文档结构和高效性能,在社交、游戏、物流、物联网和视频直播等场景中表现出色。这些场景通常具有数据量大、写入频繁且对事务要求不高的特点。选择MongoDB适合以下情况:应用无需复杂事务与join支持、需求不确定需快速迭代、需处理高QPS读写或超大规模数据存储、追求高可用性和快速水平扩展能力。相比MySQL,MongoDB能以更低的学习、开发和运维成本满足现代应用需求。
128 0
|
8月前
|
Cloud Native 安全 持续交付
深入理解微服务架构及其在现代软件开发中的应用
深入理解微服务架构及其在现代软件开发中的应用
207 33
|
8月前
|
弹性计算 持续交付 API
构建高效后端服务:微服务架构的深度解析与实践
在当今快速发展的软件行业中,构建高效、可扩展且易于维护的后端服务是每个技术团队的追求。本文将深入探讨微服务架构的核心概念、设计原则及其在实际项目中的应用,通过具体案例分析,展示如何利用微服务架构解决传统单体应用面临的挑战,提升系统的灵活性和响应速度。我们将从微服务的拆分策略、通信机制、服务发现、配置管理、以及持续集成/持续部署(CI/CD)等方面进行全面剖析,旨在为读者提供一套实用的微服务实施指南。
|
7月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
426 5
|
7月前
|
监控 安全 持续交付
构建高效微服务架构:策略与实践####
在数字化转型的浪潮中,微服务架构凭借其高度解耦、灵活扩展和易于维护的特点,成为现代企业应用开发的首选。本文深入探讨了构建高效微服务架构的关键策略与实战经验,从服务拆分的艺术到通信机制的选择,再到容器化部署与持续集成/持续部署(CI/CD)的实践,旨在为开发者提供一套全面的微服务设计与实现指南。通过具体案例分析,揭示如何避免常见陷阱,优化系统性能,确保系统的高可用性与可扩展性,助力企业在复杂多变的市场环境中保持竞争力。 ####
137 2
|
7月前
|
弹性计算 Kubernetes API
构建高效后端服务:微服务架构的深度剖析与实践####
本文深入探讨了微服务架构的核心理念、设计原则及实现策略,旨在为开发者提供一套系统化的方法论,助力其构建灵活、可扩展且易于维护的后端服务体系。通过案例分析与实战经验分享,揭示了微服务在提升开发效率、优化资源利用及增强系统稳定性方面的关键作用。文章首先概述了微服务架构的基本概念,随后详细阐述了其在后端开发中的应用优势与面临的挑战,最后结合具体实例,展示了如何从零开始规划并实施一个基于微服务的后端项目。 ####
|
8月前
|
监控 持续交付 API
深入理解微服务架构:构建高效、可扩展的系统
深入理解微服务架构:构建高效、可扩展的系统
129 4
|
8月前
|
监控 持续交付 API
深入理解微服务架构及其在现代应用开发中的应用
深入理解微服务架构及其在现代应用开发中的应用
101 4
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问