毕业论文
您现在的位置: 版本控制 >> 版本控制前景 >> 正文 >> 正文

如何将后端BbbS化NoOps的微服务

来源:版本控制 时间:2022/12/10
北京哪个医院治疗白癜风比较好 https://wapjbk.39.net/yiyuanzaixian/bjzkbdfyy/

FaaS连接并访问传统数据库会增加额外的开销,我们可以采用数据编排的思想,将数据库操作转为RESTfulAPI。顺着这个思路,我引出了后端应用的BaaS化,一句话总结,后端应用BaaS化就是将后端应用转换成NoOps的数据接口。那怎么理解这句话呢?

前面的“待办任务”Web应用,这个项目前端是单页应用,中间用了FaaS做SFF数据网关,后端数据接口还要BaaS化。这个案例会贯穿对于Servless的探索,所以你一定要动手run一下。

这个架构的优势是什么呢?我们将这个图变个形,你就更容易理解了。

从左往右看上面这张图。用户从浏览器打开我们网站时,前端应用响应返回index.html;然后浏览器去CDN下载我们的静态资源,完成页面静态资源的加载;与此同时,浏览器也向前端应用发起数据请求;前端应用经过安全签名后,再将数据请求发送给SFF;SFF再根据数据请求,调用后端接口或服务,最终将结果编排后返回。

从图里你可以看到,除了数据库是Stateful的,其它节点都已经变成了Stateless。如果你公司业务量不大的话,这个架构其实已经足够了。就像传统的MVC架构一样,单点数据库,承载基本的并发量不是问题,而且数据也可以通过主从结构和客户端读写分离的方式来优化。

但MVC架构最大的问题就是累积,当一个MVC架构的应用,在经历长期迭代和运营后,数据库一定会变得臃肿,极大降低数据库的读写性能。而且在高并发达到一定量级,Stateful的数据库还是会成为瓶颈。那我们可以将自己的数据库也变成BaaS吗?

要解决数据库的问题,也可以选择我上节课和你说的云服务商提供的BaaS服务,比如DynamoDB。但云服务商BaaS服务究竟是怎么做到的?如果BaaS服务能力不全,不够满足我们的需要时怎么办?看看传统的MVC应用中的数据库怎么改造成BaaS。

当然,BaaS化的过程有些复杂,这也正是我们后面需要慢慢探索;后端应用BaaS化,就是NoOps的微服务。在我看来后端应用BaaS化,跟微服务高度重合,微服务几乎涵盖了我们BaaS化要做的所有内容。

微服务的概念

微服务的概念对很多做后端同学来说并不陌生,尤其是做Java的同学,因为早些年Java就提出SOA面向服务架构。微服务算是SOA的一个子集,年由ThoughtWorks的MartinFowler提出。微服务设计之初是为了拆解巨石应用,巨石应用就是指那些生命周期较长的,累计了大量业务高度耦合和冗余代码的企业应用。

Serverless专栏并不打算给你详细地讲解微服务,但是希望你能一定程度上了解微服务。FaaS和微服务架构的诞生几乎是在同一时期,它俩的很多理念都是来自12要素(Twelve-FactorApp),所以微服务概念和FaaS概念高度相似,也有不少公司用FaaS实现微服务架构;不同的是,微服务的领军公司ThoughtWorks和NetFlix到处宣扬他们的微服务架构带来的好处,而且他们提出了一整套方法论,包括微服务架构如何设计,如何拆解微服务,尤其是数据库如何设计等等

我们后端应用BaaS化,首先要将复杂的业务逻辑拆开,拆成职责单一的微服务。因为职责单一,所以服务端运维的成本会更低。而且拆分就像治理洪水时的分流一样,它能减轻每个微服务上承受的压力。

这里简单说微服务主要就是想引入微服务拆解业务的分流思想和微服务对数据库的解耦方式。

微服务10要素

谈起微服务,很多人都要说12要素,认为微服务也应该满足12要素。12要素当初是为了SaaS设计的,用来提升Web应用的适用性和可移植性。我在做微服务初期也学习过12要素,但我发现这个只能提供理论认识。

其实可以归纳经验总结为微服务的10要素:API、服务调用、服务发现;日志、链路追踪;容灾性、监控、扩缩容;发布管道;鉴权。

无需用户关心服务端的事情(容错、容灾、安全验证、自动扩缩容、日志调试等等)。按使用量(调用次数、时长等)付费,低费用和高性能并行,大多数场景下节省开支。快速迭代试错能力(多版本控制,灰度,CICD等等)你可能发现跟微服务的要素有大量的重合。API就是RESTful的HTTP数据接口;服务调用你可以理解为就是HTTP请求;服务发现你可以理解为我们只能用域名调用我们的HTTP请求,不能用IP;日志、容灾、监控都不难理解;链路追踪,是微服务重要的一环,因为相对传统MVC架构,我们一个请求在后端的调用链增长了,为了快速定位问题,我们都需要打印整个调用链路的异常栈;发布管道和鉴权,和我们的FaaS也有很重要的关联。

通过前面的案例下面主要看看微服务如何让数据库解耦。

我们先分析一下“待办任务”Web服务。上一讲末尾我的作业其实已经为你准备好了,我们一起看看index.js文件,这是一个典型的MVC架构的应用。View层就是index.html和静态资源文件;Model层,我们引入lowdb用一个db.json文件代替数据库;Control层,就是app.METHOD,处理/api/*的数据逻辑。微服务是解决后端应用的,所以我们只需要

转载请注明:http://www.0431gb208.com/sjsbszl/2697.html

  • 上一篇文章:
  • 下一篇文章: 没有了