架构思考:Microservice与Serverless的优劣势比较

Microservice

微服务的思想就是将复杂单体式应用程序解耦成多个各个独立的服务,微服务设计目的就是用微服务的方式来简化构建复杂应用的过程。

主流的Microservice产口

  1. Google Kubenetes
  2. Microsoft Azure Service Fabric

Microservice的优点

适合构建复杂的应用程序。它将复杂的应用分解为独立的服务,被分解出来的多个可管理的服务可以通过约定的接口相互通信,每个服务可以作为个体独自修改、扩展和管理,而单体软件很难维护或修改。

Microservice的缺点

  1. 用户不仅要关注业务逻辑,而且还需要关注业务运行所需要的CPU、内存、网络等情况。
  2. 上手难度大,学习曲线陡。
  3. 小团队很难弄清楚如何构建端到端的生产质量解决方案。 您需要一个提供和支持这一技能所需的大量技能的人才,例如分布式系统工程师,基础设施工程师,网络专家,软件架构师以及更多支持此技能的技能人才。

Serverless

主流的Serverless产口

  1. Amazon AWS Lambda
  2. Microsoft Azure Function

以Amazon AWS Lambda为例

用户只需要在下面填放少量的代码就完成了一个lambda,即实现了FaaS(Functions as a Service,函数即服务)。

 在AWS上,配合API  Gateway, 能快速地生成一个API,效率较高。如下图。

 

Serverless的主要优点

  1. 开发者只需要专注于业务逻辑就可以了,开发效率更高。开发一个典型的服务器端项目,需要花很多时间处理依赖、线程、日志、发布和使用服务、部署及维护等相关的工作,基于Serverless架构则不需要操心这些工作。
  2. 不需要关注云主机、操作系统、网络等基础资源,Serverless框架还可以根据负载量自动水平扩展。
  3. 不需要架构。Serverless架构本身就是高可用、高扩展的架构,基本上不需要架构师的参与。
  4. 按需付费, 成本相对比较低。用户购买的ECS使用时间一般不到5成,但是为另外5成闲置时间付费了。Lambda按照运行的时间收费,成本会低很多。

Serverless的主要缺点

  1. 不适合处理复杂的业务逻辑,它更适合调用云上的其他服务,粘合关键的产品。以AWS Lambda例,我们通常使用Lambda写一段逻辑将文件上传到S3,将请求的数据写入到DynamoDB或RDS数据库等一些相对简单的功能。
  2. 排查问题困难,因为逻辑散落在各处。
  3. Serverless无法用于高并发应用,为每个请求启动一个进程开销太高,流量瞬间爆发容易导致超时。例如双十一支付宝高峰期每秒处理的交易数为8.59万笔,如果使用Serverless架构,意味着我们的系统内每秒有8.59万个进程被创建又被销毁,这是难以负担的开销。
  4. Serverless调用之间不能共享状态让编写复杂程序变得极度困难。无状态是互连网应用追求的目标,例如满足“12要素”的应用。但Serverless将无状态进行的更加彻底,在不同的调用之间无法共享内存状态,例如使用hashmap。我们的AI应用中统计已处理图片总数的全局计数器在传统架构中只是一个全局变量,但在Serverless架构中它变成存储在内存数据库(Redis)中的一条记录,更新成本、保证原子性等因素让我们的编码变得数倍复杂。对于大多云原生的互联网应用来说,这种彻底的无状态架构是一个巨大的挑战,而对于动辄有几十万、上百万行代码的、充满了状态的企业应用来说,Serverless的无状态改造几乎是一个无法完成的任务。
  5. 业务拆分问题。如何将业务拆分成成百上千个运行在独立进程、运行时间受限的函数是巨大的挑战。而是否需要如此细粒度的拆分是需要回答的第一个问题。有些问题或许变成无解难题又或成本极高,例如分布式数据库事务。
  6. 厂商锁定。云计算是赢者通吃的行业,大而全的云厂商优势巨大,Serverless加剧了这种趋势。以前用户还需要自己写很多服务器端的逻辑,迁移的时候,把服务器端代码重新部署一下。采用Serverless架构之后,代码都是各个平台的Lambda代码片段,没法迁移。从客户的角度来看,是不希望自己被某家云厂商所绑架的。所以云计算行业需要做很多标准化的工作,方便用户无缝在各种云之间迁移。

  7. 对已存在的项目迁移困难。将现有的复杂的单体式应用进行如此细粒度的拆分需要极高的成本。

Microservice与Serverless的适用场景

Microservice适合构建复杂的应用。比如:构造一个分布式数据库。

Serverless 适合构建比较简单的应用,比如上传一张图片、对一段音频/视频进行编解码、对IOT设备的请求返回一小段数据等。

  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值