如何在微服务架构下进行数据设计?

  • 时间:
  • 浏览:1
  • 来源:大发5分6合_大发5分6合官方

MongoDB 的 Sharding 有几次特征使得其非常适合微服务架构使用:

微服务办法 在扩展应用系统守护进程时也提供了灵活性。单片应用系统守护进程要求整个系统(及其所有功能)并肩扩展。

使用单体应用系统守护进程时,组件的故障肯能会危及整个应用系统守护进程。在微服务中,每种服务全是隔离的,以除理级联失败原因整个系统崩溃。肯能单个微服务的所有实例均失败,则整体服务肯能会降级,但某些组件仍可提供有价值的服务。

在单体应用中,你你什儿 通信是通过办法 调用来完成的。在微服务中,则通过 API 调用来完成。那此模块肯能服务间调用,大每种前一天是为了共享数据。

MongoDB 一向以其强大的横向扩展能力著称。不少 MongoDB 用户迁移的主要原因好多好多 使用 MongoDB 的 Sharding 技术能能突破关系型数据库在数据量和性能上的瓶颈。

简化的通信除理要在服务端进行,而全是像 ESB 肯能 Data Pipeline 除理总线那样在数据传输过程中引入非常多的逻辑,原因微服务模块紧紧的绑定在你你什儿 数据管道上。

MongoDB 是有5个分布式文档型数据库,它有以下特征使它非常适合于微服务架构,其主要特点包括: 多模数据库(Multi-model)、原生 JSON 数据特征API、动态模式、无模式(Dynamic schema)、数据变化流(Change Stream)、横向扩展能力(Sharding)。

你你什儿 点时不时是 MongoDB 获得开发者青睐的主要原因之一。MongoDB 我太大 显式的定义数据模式即可让他刚开始往数据库写入。

从数据架构师的深度来看,要怎样不成为在你你什儿 快速开发办法 模式中的有5个瓶颈,有有5个有点痛 要的环节好多好多 与否 有有5个不利于及时响应变化的数据模型。



有过后 Mandy 是老板的红人,有过后用户对产品的反响好多好多 错,好多好多 有好多好多 有前一天他不能能默默的服从。你你什儿 天 Mandy 又成功的说服了老板要在越来越人越来越人的客户体验提升项目中增加舆情分析和 AI 客户服务模块,希望通过对社交媒体上有关联邦银行的所有评论进行实时的监控和分析来及时发现联邦银行的产品反馈肯能用户体验那此的难题。

有过后肯能使用有5个动态模式(有前一天越来越人会说无模式)的数据库,则在该服务你什儿 模式修改的前一天也能能最小化运维成本。

使用微服务,只时需缩放时需额外性能的组件或功能。能能通过部署更多微服务实例来扩展服务范围,从而实现更有效的容量规划并降低软件许可成本,从而降低总体拥有成本。

在微服务架构中,应用系统守护进程被分解为小型的独立服务。服务通常专注于特定的离散目标或功能,并沿着业务边界解耦。按业务界限分离服务可让团队专注于正确的目标,并确保服务之间的自主性。

动态模式支持及快速开发能力





当然,有句话说的是架构师的工作好多好多 每天做不断的选取(Trade Off),肯能选取往往是让他很纠结。混合持久化的优势很明显,能能让每个单独的服务使用到最佳的工具和技术。

MongoDB 从 3.4 版本起在多模数据库场景上提供了不少功能模块,比如说,使用聚合框架。现在开发者能能使用:

越来越人越来越人通过有5个例子来了解微服务架构的技术特点联邦银行的架构师 Jonnathan 非常不喜欢他的产品经理 Mandy,肯能他真是 Mandy 永远与否 穷无尽的想法要实现,搞得他成天就在不断地修改代码。

微服务是有5个软件架构模式,对微服务的讨论大多集中在容器或某些技术与否 能很好的实施微服务那此方面。

 ●  无缝扩展:我太大 停机,就可在线扩容。 ●  自动均衡:我太大 应用参与即可实现数据的自动均衡,完全透明。有5个基于 MongoDB 的微服务参考架构图。





有过后它的弊端也是不容忽视:部署、监控、备份、升级等数据库管理工作从来全是一件困难有过后重要的任务。引入多个不同的数据库,也原因对系统管理维护的简化度和成本提高了好多好多 有。

 Jonnathan肯能预感到了原来前所未有的应用场景,会有太大的未知和太大的改变,于是这次决定尝试使用 Microservices 来构建你你什儿 应用。你你什儿 是 Jonnathan 设计的架构,系统要求对客户的社交账号,如Facebook、Twitter、Google+ 及 Snapchat 公开的信息及评论进行架构设计 ,并在某些共要的前一天使用 AI 技术直接和用户通过社交工具进行互动

这篇文章的目的,主要好多好多 跟越来越人越来越人来讨论从那此深度着手,来设计有5个符合微服务架构原则的数据架构。比如说,越来越人越来越人能能从一系列的那此的难题来刚开始你你什儿 讨论。



有5个适合微服务架构的数据库

微服务扩展你的数据



微服务架构中肯能其分布特征,传统的强事务机制不再适用。数据的一致性一般时需通过某些基于 Event Sourcing 肯能事件驱动模型的除理方案。Mongo DB 3.6 版本推出的数据更改流,能能用来实现有5个同类于 Kafak 一样的 Message Queue,为各个微服务间的数据协调提供有5个简单易用的系统守护进程方案。

果不其然,系统上线一段时间后,Mandy 说 Google+ 里面几乎越来越那此活动,不值得继续维护原来的一套系统。Jonnathan 这次毫无抱怨,直接把负责 Google+ 的容器停了,越来越时需任何代码改动,甚至完全越来越时需对整个系统进行停机。



当数据模型有变化前一天,比如说在迭代式开发中非常常见的好多好多 增加某些字段,MongoDB 数据库不时需对其进行修改 Schema 操作,好多好多 能能直接在同有5个集合(表)里直接写入新版本的文档。你你什儿 对于时需实现快速迭代,快速交付的微服务应用开发是有5个非常重要的特征。





 ●  有过后使用的是同你什儿 类型,支持多种场景的数据库,如 NoSQL 里面为功能最全面的 MongoDB。 ●  真是是多实例,有过后只需维护你什儿 类型的数据库,管理上和人员配备上都较为简单。

肯能你在开发的应用是一款企业级产品,会交付到客户环境部署安装,则运维管理的简单性将在技术选型中占据 非常重要的有5个比重,无疑你你什儿 状况下多模数据库更加适用。

放慢的上线时间

在上图你你什儿 架构里面,Jonnathan 把有5个不同社交媒体的数据架构设计 和交互用 4 个独立的模块进行实现。并用有5个 Feed Merge 服务,有5个 Aggregate Service 把 4 个同类功能的微服务模块的数据和功能进行整合,提供给分析平台使用。

数据的管理在微服务架构下也是和传统单体有很大的不同考量。大每种前一天越来越人越来越人希望数据就和服务一样,要有充分的独立性,能能和某个服务并肩部署,并肩扩展,肯能并肩重构。

在新一代的 NoSQL 数据库产生前一天,越来越人越来越人我太大 时需考虑你你什儿 那此的难题,有过后以 MongoDB、Cassandra 等为代表的 NoSQL 代表的是灵活建模。

 ●  $facet 来实现分面搜索。 ●  内存引擎功能,用于支持同类于 Redis 的高速缓存。 ●  全文检索,用于实现搜索类型场景。

动态模式

多模数据库:Multi- model Database

 ●  数据库分区

应用数据分区,顾名思义,好多好多 在应用端对数据的存储进行分区管理。比如说,有5个社交应用能能按国家或地区为界把用户的数据架构设计 到不同数据库实例里面。原来一句话每个数据库实例只时需存储一每种数据,从而实现海量的数据管理能力。

 ●  Y 轴,非重叠功能的拆分(微服务) ●  Z 轴,数据的分区(Sharding)

有5个好的数据架构,在微服务体系内,应该具有同样的可扩展、易扩展性质,从而不给微服务架构拖后腿。关于数据分区扩展有你什儿 做法:

混合持久化在大型互联网公司是有5个比较风行的模式。它秉承的原则好多好多 为有点痛 的任务提供最好的工具。比如说,肯能假若提供有5个高并发低延迟的共享用户会话方案(Shared Session Storage), Redis 肯能是有5个非常理想的选取。

相反,服务的更新能能立即提交、测试和部署,对个别服务的更改我太大 影响系统的某些每种。

时需对有5个服务进行升级肯能数据架构改动的前一天,我太大 影响到某些的服务。时需对某个服务进行扩展的前一天,也能能手术式的对某有5个服务进行局部扩容。另外,肯能某些服务对数据库有特殊的需求,你你什儿 模式也为下文所讲的混合持久化(Polyglot Persistence)提供了肯能性。

实施微服务架构能能使组织放慢地将应用系统守护进程推向市场。对整体应用系统守护进程的更改(即使很小)时需重新部署整个应用系统守护进程堆栈,从而引入风险和简化性。

微服务之间的通信要使用轻量级 API,如 HTTP RESTful API。原来想使得服务对 API 通信方案的依赖减到最小。

传统的数据库全是强模式,时需对 Schema 进行清晰定义, 在需求修改原因模型修改的前一天时需对数据库进行模式升级,是有5个时需下线、耗时有过后是高成本的运维操作。

多模数据库

轻量级 API

混合持久化:Polyglot Persistence

这通常原因越来越人越来越人肯能要在有5个微服务架构应用内使用多个数据库实例。有过后同样时需考虑到数据分布在多实例之间前一天,往往还时需某些冗余,以及要怎样保持那此数据在那此系统中的一致性等那此的难题。下面.让他着重来讨论微服务架构下的数据设计的某些考量因素。

那此服务通常会以业务模块为界限,不利于被单独开发部署,往往全是用自动化的部署工具来进行产品的发布。通过使用微服务办法 ,大公司能能放慢推出新产品和服务,使得开发团队与业务目标保持一致。

肯能我是在实现有5个产品目录,涉及到多量不定特征的商品数据及属性的建模管理,我肯能会采用模式灵活,动态 Schema 的 MongoDB 来作为我的数据库除理方案。肯能假若支持非常强大的全文搜索,ElasticSearch 则是行业中的佼佼者。

 ●  微服务的优势及架构特点 ●  微服务架构下的数据设计 ●  有5个适合微服务架构的数据库 1 那此是微服务

按照 Martin Fowler 的定义,微服务是有5个软件架构模式,通过开发一系列的小型服务的办法 来实现有5个应用。每有5个原来的小服务通常全是运行在各自 的系统守护进程里面,有过后通过轻量级的HTTP API 办法 进行通讯。

 ●  数据在同有5个地方,会给贪图方便的开发肯能 DBA 工程师编写好多好多 有数据间深度依赖的系统守护进程肯能工具。 ●  无法针对某有5个服务进行精准优化或扩展,如上文所讲的 Snapchat 的例子。

好多好多 有一般推荐的做法,是为每有5个微服务准备有5个单独的数据库,也即一库一服(Database per Service)模式。如上图右侧所示。你你什儿 模式更加适合微服务架构,它满足每有5个服务是独立开发、独立部署、独立扩展的特征。

微服务架构带来的有5个非常显著的负面性好多好多 众多实例的测试发布及管理。传统应用真是开发简化,有过后部署和运维相对比较集中,一台数据库,2-4 个应用服务器就差太大了。有过后微服务架构下单独服务的数量轻则 10-20,多则上百个,好多好多 有微服务架构一般时需配套的 CI/CD 办法 来支撑。

从来越来越有5个 one-size-fits-all 的架构,好多好多 有在微服务架构下面,越来越人越来越人时需了解的,一样是几次关键的架构考量点。有过后针对各自 的实际应用,选取那此考量点是更加重要的。

无论是单体应用,还是微服务应用,有某些是肯定的:应用的各个模块之间都时需进行较为频繁的通信,通过并肩协同媒体媒体合作,来实现应用的整体价值。

横向扩展能力

刚下线 Google+,Mandy 又来提需求说最近合并了另一家银行,客户好多好多 有使用 Whatsapp。二话不说,Jonnathan 直接上了有5个新的模块来除理 Whatsapp ,如下图。

微服务使技术团队不利于与组织需求保持一致,有过能能能调整团队的大小以匹配所需的任务。通常,微服务团队规模较小,有过后跨部门(如一般暗含Ops、Dev、QA),并专注于整个应用系统守护进程的单个组件。

数据变化流

针对于某些小型规模的用户,肯能是过高 足够掌握各种新型技术人才的公司来说,另你什儿 更为可行的模式肯能是多模数据库(Multi-model)。如上图右侧所示,多模数据库的特征是:

微服务架构的一大裨益是其灵活的扩展性。以里面的 Snapchat 为例,肯能时需架构设计 或除理的数据量快速增长,在越来越人越来越人增加应用服务实例的并肩,支撑数据存储的模块也要相应扩充。

本文来自云栖社区媒体媒体合作伙伴“互联网架构师”,了解相关信息能能关注“互联网架构师”。

混合持久化 vs 多模数据库

动态支持模式变化的特征使得它们成为敏捷开发和微服务体系内有5个有力的竞争者,在选型的前一天也是有5个重要的考量因素之一。越来越人越来越人说一库一服的架构使得对有5个服务的数据库模式修改我太大 影响到某些服务。

更容易的规模化

AFK Partners 在越来越人越来越人的 Scale Cube 一文里对性能扩展提出了原来的观点,要设计有5个真正意义上的可扩展系统,越来越人越来越人时需考虑5个维度,如上图所示:

这是有5个好多好多 有架构师肯能会忽略,有过后非常重要的关注点。越来越人越来越人在迭代式开发 DevOps 微服务上的好多好多 有努力,全是为了快速开发,快速上线,以及快速响应变化的需求。



红杉资本的合伙人 Matt Miller 是公认的微服务技术领域专家。他广被传播的“微服务生态图”详尽的列出了微服务架构的相关技术栈。在这里他推荐了 MongoDB 作为主要的数据管理方案。

微服务的功能分块独立部署为你你什儿 架构模式提供了非常好的基础,如上图左侧所示好多好多 个典型的混合持久化的案例:

持续发布

通过提供对各自 服务的所有权,而全是功能区域,微服务还能能打破团队之间的孤岛,并改善媒体媒体合作。你你什儿 办法 对于分布式和远程团队尤其强大。 同类,不同地点的团队能能独立发布和部署功能。

解耦

微服务办法 体现出某些优势,包括放慢的上线时间、灵活性、弹性、一致性以及相对更低的成本。

数据与治理

本文将从以下几次深度来和越来越人越来越人分享在微服务架构下进行数据设计时需关注的地方,旨在帮助越来越人越来越人在构建微服务架构时,提供有5个数据方面的视角:

 你你什儿 架构模式通常会被认为是微服务架构下的反范式,它的那此的难题在于:

弹性

你你什儿 状况下肯能时需比较有资源的公司肯能团队才能能使用。这也解释了你你什儿 模式要怎样会在大型互联网公司得到较多的采用与推广。

这里面每有5个服务按照微服务的架构,每有5个全是单独部署,在有5个独立的容器内执行,并使用各自 的有5个数据库。



每种服务全是独立开发,测试和部署的,服务通常是作为独立的系统守护进程或软件容器分开的,通过网络和商定的 API 进行通信,尽管在某些状况下,网络肯能在本地。通常部署相同微服务的多个实例,从而提供冗余和可扩展性。

更好的灵活性和可扩展性

 ●  肯能是多个数据库,我与否 为每有5个微服务选取有5个最共要的数据库,还是选取同你什儿 类型的数据库? ●  我要怎样在微服务架构下扩展我的数据库? ●  当有5个我依赖的服务时需修改数据库 Schema 的前一天,与否 会影响到我? ●  当微服务应用不断衍变的前一天,我的数据库与否 能能快速的响应应用需求变化?以上那此好多好多 越来越人越来越人在微服务数据架构前一天要关注的地方。

一库一服还是一库多服

又过了一段时间,你你什儿 次是他各自 要对系统做调整了,原来 Snapchat 最近大火,他部署的系统频受压力,性能下降。为了除理你你什儿 那此的难题,Jonnathan 果断增加了额外 2 台容器来并肩支撑 Snapchat 信息的架构设计 和除理。 

原文发布时间为:2018-11-12

数据库分区,好多好多 由数据库的路由节点来完成数据分区的任务。数据库分区的优势是显然的,它对应用透明、扩展快速、我太大 下线等。肯能你的应用有潜在扩充的需求,选取有5个不利于自动扩展的分布式数据库是有5个比较明智的选取。

共享数据最贱的办法 当然好多好多 采用你什儿 共享数据库的模式,也好多好多 单体应用常用的办法 。应用能能有多个系统模块,但一般全是不能能有5个数据库。如下图左边,3 个微服务模块,里面共享有5个数据库,简称一库多服务。

感谢微服务架构,Jonnathan 在一系列的产品需求变化以及系统扩容需求下,能能从容应付。要实现微服务架构,时需你铭记以下几次微服务架构的应用设计原则。