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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本文讲的是利用微服务构建现代应用(二),【编者的话】本文是如何用微服构建现代应用的第二部分,介绍了如何用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。
原文标题:利用微服务构建现代应用(二)
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
8天前
|
API 数据库 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第8天】 随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性、维护性和敏捷性的挑战。为了解决这些问题,微服务架构应运而生,并迅速成为后端开发领域的一股清流。本文将深入探讨微服务架构的设计原则、实施策略及其带来的优势与挑战,为后端开发者提供一种全新视角,以实现更加灵活、高效和稳定的系统构建。
14 0
|
22天前
|
负载均衡 测试技术 持续交付
高效后端开发实践:构建可扩展的微服务架构
在当今快速发展的互联网时代,后端开发扮演着至关重要的角色。本文将重点探讨如何构建可扩展的微服务架构,以及在后端开发中提高效率的一些实践方法。通过合理的架构设计和技术选型,我们可以更好地应对日益复杂的业务需求,实现高效可靠的后端系统。
|
22天前
|
监控 持续交付 API
构建高效可扩展的微服务架构
在当今快速迭代和竞争激烈的软件市场中,构建一个高效、可扩展且易于维护的后端系统变得尤为重要。微服务架构作为一种流行的分布式系统设计方式,允许开发者将应用程序划分为一系列小型、自治的服务,每个服务负责执行特定的业务功能。本文将探讨如何利用现代技术栈搭建一个符合这些要求的微服务架构,并讨论其潜在的挑战与解决方案。我们将涵盖服务划分策略、容器化、服务发现、API网关、持续集成/持续部署(CI/CD)以及监控和日志管理等关键主题,以帮助读者构建出既可靠又灵活的后端系统。
|
24天前
|
监控 Kubernetes 持续交付
构建高效可扩展的微服务架构:后端开发实践指南
在数字化转型的浪潮中,企业对软件系统的要求日益提高,追求快速响应市场变化、持续交付价值成为核心竞争力。微服务架构以其灵活性、模块化和独立部署的特点,成为解决复杂系统问题的有效途径。本文将深入探讨如何构建一个高效且可扩展的微服务架构,涵盖关键设计原则、技术选型及实践案例,为后端开发者提供一条清晰的指导路线,帮助其在不断变化的技术环境中保持竞争力。
124 3
|
6天前
|
Kubernetes 安全 Java
构建高效微服务架构:从理论到实践
【4月更文挑战第9天】 在当今快速迭代与竞争激烈的软件市场中,微服务架构以其灵活性、可扩展性及容错性,成为众多企业转型的首选。本文将深入探讨如何从零开始构建一个高效的微服务系统,覆盖从概念理解、设计原则、技术选型到部署维护的各个阶段。通过实际案例分析与最佳实践分享,旨在为后端工程师提供一套全面的微服务构建指南,帮助读者在面对复杂系统设计时能够做出明智的决策,并提升系统的可靠性与维护效率。
|
17天前
|
监控 Java 开发者
构建高效微服务架构:后端开发的新范式
在数字化转型的浪潮中,微服务架构以其灵活性、可扩展性和容错性成为企业技术战略的关键组成部分。本文深入探讨了微服务的核心概念,包括其设计原则、技术栈选择以及与容器化和编排技术的融合。通过实际案例分析,展示了如何利用微服务架构提升系统性能,实现快速迭代部署,并通过服务的解耦来提高整体系统的可靠性。
|
22天前
|
消息中间件 敏捷开发 运维
构建高效可靠的微服务架构:策略与实践
随着现代软件开发的复杂性增加,微服务架构逐渐成为企业解决大型应用系统分解、敏捷开发和持续部署问题的有效手段。本文深入探讨了构建一个高效且可靠的微服务架构的关键策略,包括服务的合理划分、通信机制的选择、数据一致性保障以及容错处理。通过分析这些策略在具体案例中的应用,我们旨在为开发者提供一套可行的微服务设计及实施指南。
128 6
|
23天前
|
监控 数据管理 API
构建高效微服务架构:后端开发的新趋势
在现代软件开发领域,随着业务需求的不断复杂化以及敏捷迭代的加速,传统的单体应用架构逐渐暴露出其局限性。微服务架构作为一种新的解决方案,以其高度模块化、独立部署和可扩展性,正成为后端开发领域的新趋势。本文将探讨微服务架构的核心概念,分析其优势与面临的挑战,并提供实施高效微服务的策略和最佳实践,帮助读者理解如何利用这一架构模式提升系统的可靠性、灵活性和可维护性。
134 5
|
20小时前
|
监控 JavaScript 安全
构建微服务架构下的API网关
【4月更文挑战第15天】在微服务架构中,API网关扮演着至关重要的角色。它作为系统的唯一入口,不仅负责请求的路由、负载均衡和认证授权,还涉及到监控、日志记录和服务熔断等关键功能。本文将探讨如何构建一个高效且可靠的API网关,涵盖其设计原则、核心组件以及实现策略,旨在为后端开发人员提供一套实用的指导方案。
14 4
|
1天前
|
监控 负载均衡 API
构建高性能微服务架构:后端开发的最佳实践
【4月更文挑战第14天】 在当今快速发展的软件开发领域,微服务架构已成为构建可扩展、灵活且容错的系统的首选方法。本文深入探讨了后端开发人员在设计和维护高性能微服务时需要遵循的一系列最佳实践。我们将从服务划分原则、容器化部署、API网关使用、负载均衡、服务监控与故障恢复等方面展开讨论,并结合实际案例分析如何优化微服务性能及可靠性。通过本文的阅读,读者将获得实施高效微服务架构的实用知识与策略。