从Uber微服务看最佳实践如何炼成?

导读:Uber成长非常迅速,工程师团队快速扩充,据说Uber有2000名工程师,8000个代码仓库,部署了1000多个微服务。微服务架构是Uber应对技术团队快速增长,功能快速上线很出色的解决方案。本文偏向微服务的入门篇,以Uber微服务为例,进行了深入浅出的讲解。

微服务特性

对于微服务没有适当的定义,你可以说它是一个框架,由小型的、独立的可部署的服务组成,执行不同的操作。

微服务专注于单个业务领域,可以作为完全独立的可部署服务,并在不同的技术栈上实现它们。

单体架构和微服务架构区别

在使用微服务构建自己的应用程序之前,需要清楚地了解应用程序的范围和功能。

微服务特性

  • 解耦 - 系统内的服务在很大程度上是解耦的。因此,整个应用程序可以轻松构建,更改和缩放
  • 组件化 - 微服务被视为独立的组件,可以轻松替换和升级
  • 业务能力 - 微服务非常简单,专注于单一功能
  • 自治 - 开发人员和团队可以独立工作,从而提高速度
  • 持续交付 - 通过软件创建,测试和批准的系统自动化,允许软件的频繁发布
  • 责任 - 微服务不像项目那样专注于应用程序。相反,他们将应用程序视为他们负责的产品
  • 分散治理 - 重点在于使用正确的工具来完成正确的作业。这意味着没有标准化模式或任何技术模式。开发人员可以自由选择最有用的工具来解决他们的问题
  • 敏捷 - 微服务支持敏捷开发。任何新功能都可以快速开发并再次丢弃

微服务优势

  • 独立开发 - 所有微服务都可以根据各自的功能轻松开发
  • 独立部署 - 基于各自的服务,可以单独部署在任何应用程序中
  • 故障隔离 - 即使应用程序的一项服务不起作用,系统仍会继续运行
  • 混合技术堆栈 - 可以使用不同的语言和技术来构建同一应用程序的不同服务
  • 细粒度缩放 - 各个组件可根据需要进行扩展,无需将所有组件扩展到一起

微服务设计最佳实践

在当今世界,复杂性已经渗透到产品中。微服务架构能够更好地保持团队的规模和功能。

以下是微服务设计的最佳实践:

现在,让我们来看一个用例来更好地理解微服务。

案例:购物车应用程序

当打开购物车应用程序时,你看到的只是一个网站。但是,在幕后,购物车应用程序有接受支付服务、顾客服务等等。

假设开发人员已经在一个整体框架中进行了创建。如下图:

购物车应用程序的整体框架

所有功能都放在一个代码库中,并在一个底层数据库下。

现在,假设市场上出现了一个新品牌,开发人员希望将这个品牌的所有细节都放在这个应用程序中。

他们不仅要重新为新标签提供服务,还必须重新构建完整的系统并进行相应部署。

为了应对这种挑战,开发人员决定将其应用程序从单体架构转移到微服务。如下图:

购物车应用程序的微服务架构

这意味着开发人员不必创建Web微服务,逻辑微服务或数据库微服务。相反,他们为搜索,推荐,客户服务等创建单独的微服务。

这种应用架构不仅有助于开发人员克服以前架构面临的挑战,还有助于轻松构建,部署和扩展购物车应用程序。

微服务设计指南

  • 作为开发人员,决定构建应用程序时,要将各个域分离,并在功能上明确。
  • 设计的每一个微服务都只专注于应用中的一个服务。
  • 确保设计的应用程序使每个服务都可以单独部署。
  • 确保微服务之间的通信是通过无状态服务器完成的。
  • 每一项服务都可以被推进到更小的服务中,拥有自己的微服务。

在设计微服务时,已经了解了基本的指导方针,现在来了解一下微服务的架构。

微服务架构是如何工作的 ?

一个典型的微服务架构(MSA)应该包括以下组件:

  1. 客户端
  2. 身份提供者
  3. API网关
  4. 消息格式
  5. 数据库
  6. 静态内容
  7. 管理
  8. 服务发现

如下图:

微服务架构

这个架构看起来有点复杂,让我们来简化一下。

1、客户端

架构始于不同类型的客户端,从不同的设备尝试执行各种管理功能,如搜索、构建、配置等。

2、身份提供者

这些来自客户端的请求将传递给身份提供者,这些提供者对客户端的请求进行身份验证,并将请求传递给API网关。然后,请求通过定义良好的API网关与内部服务通信。

3、API网关

由于客户端不直接调用服务,因此API网关作为客户端将请求转发到适当的微服务的切入点。

使用API网关的优点包括:

  • 所有服务都可以在客户端不知情的情况下进行更新。
  • 服务也可以使用非网络友好的消息传递协议。
  • API网关可执行跨切割功能,如提供安全性、负载均衡等。

在接收到客户端的请求后,内部架构由微服务组成,这些微服务通过消息相互通信来处理客户端请求。

4、消息格式

有两种类型的消息通过它们进行通信:

  • 同步消息:在客户端等待服务响应的情况下,微服务通常倾向于使用REST (Representational State Transfer),因为它依赖于无状态、客户端服务器和HTTP协议。这个协议被用作一个分布式环境,每个功能都用一个资源来表示,以执行操作。
  • 异步消息:在客户端不等待服务响应的情况下,微服务通常倾向于使用AMQP、STOMP、MQTT等协议。这些协议在这种类型的通信中使用,因为消息的性质被定义,这些消息在实现之间可以互操作。

下一个问题是,使用微服务的应用程序如何处理数据?

5、数据处理

每个微服务都拥有一个专有数据库来捕获它们的数据并实现相应的业务功能。此外,微服务的数据库只通过其服务API进行更新。参考下图:

微服务处理数据演示

微服务提供的服务被转发到任何支持不同技术栈的进程间通信的远程服务。

6、静态内容

在微服务内部进行通信后,将静态内容部署到基于云的存储服务,通过内容交付网络(CDN)直接将其交付给客户端。

除了上述组件,还有一些其他组件出现在典型的微服务架构中。

7、管理

该组件负责平衡节点上的服务和故障识别。

8、服务发现

用作微服务的指南,以找到它们之间的通信路由,由它维护节点所在的服务列表。

现在来看看这个架构的优缺点,以更好地理解何时使用这种架构。

微服务架构优缺点

微服务架构的优点 微服务架构的缺点
自由使用不同的技术 增加故障排除难题
每个微服务都关注单一业务能力 由于远程呼叫而增加延迟
支持单独的可部署单元 增加配置和其他运营工作量
允许频繁的软件发布 难以保持交易安全
确保每项服务的安全性 很难跟踪各种服务边界的数据
并行开发和部署多个服务 服务之间很难移动代码

下面来比较一下UBER之前和现在的架构。

Uber微服务案例

Uber之前的架构

像许多初创公司一样,UBER在开始之初在单一城市运营,为单一产品打造了单体架构。当时有一个代码库似乎被清理了,并解决了UBER的核心业务问题。然而,随着UBER在全球范围内扩张,它们在可扩展性和持续集成方面面临各种各样的问题。

UBER的单体架构

上图描述了UBER之前的架构。

  • 与乘客和司机连接的REST API。
  • 三种不同的适配器与API一起使用,当预定出租车时,执行诸如账单、付款、发送电子邮件/消息等操作。
  • MySQL数据库存储所有数据。

因此,可以发现这里所有的特性,比如乘客管理、计费、通知功能、支付、行程管理和驱动管理都是在一个框架内完成的。

问题陈述

当Uber开始在世界范围扩张时,这种框架引入了各种各样的挑战。以下是一些突出的挑战。

  • 所有的功能都必须重新构建、部署和测试,以更新单一功能。
  • 在单个存储库中修复bug变得非常困难,因为开发人员不得不一次又一次地修改代码。
  • 在全球范围内引入新功能的同时,要将这些特性进行扩展是相当困难的。

解决方案

为了避免此类问题,Uber决定改变自己的架构,效仿亚马逊(Amazon)、Netflix、Twitter等其他超级增长公司。因此,Uber决定将其整体架构拆分为多个代码库,以形成一个微服务架构。

参考下面的图表,看看Uber的微服务架构。

Uber的微服务架构

  • 我们在这里看到的主要变化是引入了API网关,所有的司机和乘客都是通过这个网关连接的。从API网关,所有的内部点都连接在一起,如乘客管理、司机管理、行程管理等。
  • 每个单元是单独的可部署单元,执行单独的功能。例如:如果你想在账单微服务中更改任何内容,那么只需部署账单微服务,而不必部署其他服务。
  • 所有的功能都是单独扩展的,即每个特征之间的相互依赖被移除。

例如,我们都知道,搜索出租车的人数比预订出租车和付款的人要多。这就得到了一个推论:在乘客管理微服务上工作的流程的数量超过了处理支付的流程的数量。

通过这种方式,Uber将其架构从单一业务转移到微服务中获益。

原文链接:

本文作者:数人云
原文链接:https://mp.weixin.qq.com/s/-xaC4icfGh1T047-oBCDlQ
版权归作者所有,转载请注明出处

原文地址:https://www.cnblogs.com/justBobo/p/10660408.html

时间: 2024-07-29 23:44:47

从Uber微服务看最佳实践如何炼成?的相关文章

设计为服务的最佳实践(转)

你是否曾想过,什么是微服务?以及大规模的互联网行业,例如社交,电商,物流,金融等领域,如何使用微服务构建互联网应用以满足用户需求. 要了解微服务是什么,你必须了解如何将单体应用程序,拆解为独立打包和部署的微型应用程序.本文章将帮助你清晰化的理解,开发者如何根据需求使用微服务来构建他们的应用程序. 下面,从以下几个维度进行阐述 为何选择微服务? 什么是微服务? 微服务架构的功能 微服务架构的优点 设计微服务的最佳实践 1,为何选择微服务? 现在,在我介绍微服务之前,让我们看看在微服务之前流行的架构

(转)微服务框架落地实践之路

http://www.primeton.com/read.php?id=2276&his=1 一.微服务架构产生的背景 近十年中,互联网给我们生活带来了翻天覆地的变化,消费者的生活方式日益数字化,人们可以在任何时间.任何地点利用网络进行购物体验,运用社交媒体进行自我表达,企业也在运用多种技术手段,发挥数字化潜力,改善客户联系,促进企业业务模式的转型.在这种背景下,互联网也好,传统企业也罢,都面临一个共同的需求:面对快速变化的需求,面对业务模式的升级,如何构建出灵活的,可扩展,可重用的系统? 前几

微服务架构与实践及云原生等相关概念

微服务架构与实践 笔记:<微服务架构与实践> 王磊 著 一 单块架构 1 定义:对于这种功能集中.代码和数据中心化.一个发布包.部署后运行在同一进程的应用程序,我们通常称之为单块架构应用,并非物理上的分层. 2 单层架构:数据 逻辑 页面 混合 3 三层架构: 1)表示层:数据显示和用户交互 2)业务逻辑层:业务逻辑处理 3)数据访问层:数据存储访问 4 优势: 比较适合小项目 易于开发:开发简单直接,集中式管理,基本不会重复开发,集成工具适合 易于测试:单进程 易于部署:单项目包,功能都在本

Docker+Kubernetes(k8s)微服务容器化实践

Docker+Kubernetes(k8s)微服务容器化实践网盘地址:https://pan.baidu.com/s/1uVkMsKgfzsJcShlnuLk3ZQ 密码:1i7q备用地址(腾讯微云):https://share.weiyun.com/5ZcsfIX 密码:udrifz Docker官方支持Kubernetes, Kubernetes是容器编排最大赢家,Kubernetes 以其高效.简便.高水平的可移植性等优势占领了绝大部分市场,江湖一哥地位毋庸置疑,脱胎于谷歌的成熟的Borg

Spring Cloud 微服务设计与实践

整理微服务设计与实践历程,共享给大家. 微服务的描述 The description of microserivce by Martin Fowler : 根据业务模块划分服务种类. 每个服务可以独立部署并且互相隔离. 通过轻量的 API 调用服务. 服务需要保证良好的高可用性. 微服务架构是以专注与单一责任的小功能模块为基础.通过 API 相互通信的方式完成复杂业务系统搭建的一种设计思想. 演变过程 单体架构(Monolithic) -> 垂直架构 -> SOA 架构 -> 微服务架构

微服务探索与实践—总述

背景 软件开发是一个不断发展的过程,从当初的面向过程为主到如今的面向对象的开发,软件开发者不断探索与实践更加符合时代发展要求的开发模式与架构思想,而这,也在极大程度上提高了软件开发的效率. 微服务是一种架构模式或者说是架构风格,而架构这个词语,相信有很多人都曾试图为它做出明确的定义,可是很难下,因为软件架构也在不断发展,内涵也在不断得到丰富.只是不变的是,我们需要通过软件架构,根据族组织.业务.技术等因素划分出不同的但可以相互协作的应用系统,使得设计出来的系统具有较高的伸缩性.可维护性以及可扩展

微服务架构与实践-王磊

(原文地址:http://www.infoq.com/cn/articles/microservice-and-continuous-delivery) 摘选书中节选-微服务与持续交付 十年以前,软件在一年之内的交付次数屈指可数. 过去的十年间,交付的过程一直被不断地优化和改进.从早期的RUP模型.敏捷.XP.Scrum,再到近几年的精益创业.DevOps,都力求能更有效地降低交付过程所耗费的成本并提高效率,从而尽早实现软件的价值. 持续交付是一种软件开发策略,用于优化软件交付的流程,以尽快得到

微服务探索与实践—服务注册与发现

前言 微服务从大规模使用到现在已经有很多年了,从之前的探索到一步步的不断完善与成熟,微服务已经成为众多架构选择中所必须面对的一个选项.服务注册与发现是相辅相成的,所以一般会合起来思索.其依托组件有很多,比如Zookeeper,Consul,Eureka等等. 本文,我们将探讨服务注册和发现的概念及其使用机制,以使得微服务能够在不知道其确切位置(通常是URL)的情况下消费其他服务.由于本文主要是个人实践的一些总结,总会有不足之处,也希望各位看官帮忙完善.本系列前一篇文章请移步总述 服务注册与发现探

【读书笔记】微服务架构与实践

一:概述 微服务实在互联网大浪潮下顺势而起的 微服务降低了单个问题的复杂性,但是提高了整体上运维和部署的难度 二:基础篇 提出以下4个问题 神马是微服务 微服务到底怎么发展起来的? 微服务的优势在哪儿里?为什么现在大家都在谈微服务 微服务有不什么不足,或者对使用微服务说有什么挑战? 作为从业者的我们到底要怎么看待微服务,并且如何在实际的工作项目中使用它? 分别针对上面的四个问题,做出解答 什么是微服务? 微服务更像是一种架构模式,不是某种具体的技术.提倡将单一的应用划分为一组小的服务,服务之间相