Serverless入门课
蒲松洋(秦粤)
前百度国际化前端组组长
立即订阅
4392 人已学习
课程目录
已完结 16 讲
0/2登录后,你可以任选2讲全文学习。
开篇词 (2讲)
开篇词 | 说来说去,到底Serverless要解决什么问题?
免费
特别放送 | 为什么阿里要举集团之力趟坑Serverless?
基础篇 (4讲)
01|定义:到底什么是Serverless?
02 | 原理:通过一个案例,理解FaaS的运行逻辑
03 | 原理:FaaS的两种进程模型及应用场景
04 | 原理:FaaS应用如何才能快速扩缩容?
进阶篇 (3讲)
05 | 后端BaaS化(上):NoOps的微服务
06 | 后端BaaS化(中):业务逻辑的拆与合
07 | 后端BaaS化(下):Container Serverless
实战篇 (4讲)
08 | 搭建私有Serverless(一):K8s和云原生CNCF
09 | 搭建私有Serverless(二):基于K8s的Serverless
10 | 经验:Serverless架构应该如何选型?
11 | 经验:Serverless开发最佳实践
结束语 (2讲)
结束语 | 带你整体回顾我们的Serverless案例
结课问卷获奖用户名单
期末测试 (1讲)
期末测试 | 有关Serverless,你掌握了多少呢?
Serverless入门课
15
15
1.0x
00:00/00:00
登录|注册

05 | 后端BaaS化(上):NoOps的微服务

蒲松洋 2020-04-27
你好,我是秦粤。现在我们知道了在网络拓扑图中,只有 Stateless 节点才能自由扩缩容,而 Stateful 节点因为保存了重要数据,我们要谨慎对待,因此很难做扩缩容。
FaaS 连接并访问传统数据库会增加额外的开销,我们可以采用数据编排的思想,将数据库操作转为 RESTful API。顺着这个思路,我引出了后端应用的 BaaS 化,一句话总结,后端应用 BaaS 化就是将后端应用转换成 NoOps 的数据接口。那怎么理解这句话呢?后端应用 BaaS 化,究竟应该怎么做?接下来的几节课,我们会展开来讲。
我们先回忆一下上节课的“待办任务”Web 应用,这个项目前端是单页应用,中间用了 FaaS 做 SFF 数据网关,后端数据接口还要 BaaS 化。这个案例会贯穿我们的课程,所以你一定要动手 run 一下。为了让你对我们的项目有个宏观上的认识,我还是先交付你一张大图。
“待办任务”Web应用架构图
这个架构的优势是什么呢?我们将这个图变个形,你就更容易理解了。
架构变形示意图
咱从左往右看上面这张图。用户从浏览器打开我们网站时,前端应用响应返回 index.html;然后浏览器去 CDN 下载我们的静态资源,完成页面静态资源的加载;与此同时,浏览器也向前端应用发起数据请求;前端应用经过安全签名后,再将数据请求发送给 SFF;SFF 再根据数据请求,调用后端接口或服务,最终将结果编排后返回。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Serverless入门课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(6)

  • 我来也
    哈哈,原来老师也觉得云厂商提供的kafka云服务贵。
    我对这个深有体会!

    我看领导买的一个阿里云kafka云服务,要4K+/月,配置也就一般吧,可能监控做的比较好吧。
    再想想我买的竞价付费实例,约64元/月,4cpu8g配置,还不是突发性能的。当开发环境的k8s节点,也不怕丢数据,哈哈。

    想一想,还是有钱真好。

    作者回复: 用CaaS服务,自己搭建一套Kafka还便宜一些。现在程序员可以调度的机器资源还是很充沛的。

    2020-04-27
    2
    3
  • qinsi
    请问数据库解耦时副本数据库允许数据写入吗?如果允许写入的话会不会因为写入的数据冲突导致数据不一致呢?

    作者回复: 数据副本只是为了区分的叫法,当然允许写入了。Binary log有一定的容错性,要考虑事务逻辑。但如果是银行或者支付的场景,要解决强一致性。可以直接写消息队列,再去消费数据。

    2020-04-28
    2
  • 此方彼方Francis
    微服务标准的做法是一个微服务实例独享一个数据库实例的。

    这个说法有些夸张了吧?老师有生产上的实践案例吗?

    作者回复: 我这里提的微服务实例独享一个数据库实例是标准做法,这样做可以让微服务实例+数据库形成的整体,变成stateless。这个叫做:数据库的可弃性。
    实际场景比较灵活,你可以一个微服务多个实例,使用一个数据库。不过你需要额外关注:这个数据库不会成为你的瓶颈。

    2020-05-03
    1
    1
  • 电光火石
    老师好,在后台服务baas化的过程中,关于数据库跟以前微服务的方式有些不一样,微服务的各个节点是共享数据库的,但是baas化中,每个节点有自己的数据库,而且数据库的内容是一样的。这样是否带来2个问题:
    1. 在数据量很大的情况下,每个节点都有一样的数据库,是否会使得数据存储量会翻几倍,成本会很高
    2. 在扩容的情况下,如果数据量很大,新节点需要复制的数据也很多,启动时间会非常的长
    3. 有多少个应用,就有多少个数据库实例。一般情况下,我们应用的数量会远高于数据库机器的数量。高并发场景下,会不会导致网络占用很高,性能整体上升
    还是说这种方案本身就不适合大并发或者数据量很高的场景,谢谢了!

    作者回复: 微服务标准的做法是一个微服务实例独享一个数据库实例的。当然你业务量不大,可以多个微服务实例共享一个数据库实例。
    微服务架构在docker流行后才火,就是因为docker可以让计算资源进一步碎片化,所以成本并不会很高。
    数据实例的启动时,通常是先从现有数据库副本创建,再根据消息队列同步后续数据。启动实例过程是秒级的。
    微服务架构,本身就是通过拆解将复杂的业务问题变成一个个小的职责单一的小服务。运维的复杂度会上升,但是整体性能并不会下降多少。
    你可以想想,现在的京东,淘宝这样的网站,背后都是微服务架构的。如果你用单体应用开发这么庞大的一个应用,这么多团队和人员参与,怎么去运维和开发。

    2020-04-27
    2
    1
  • 吴科🍀
    老师,关于用mq实现数据库同步的问题,如果要求数据强一直都业务场景很难实现啊,比如秒杀,通过mq同步不及时,用户会查到不同的库存,造成多卖的情况呢

    作者回复: 你说的这种数据强一致性的场景,要直接用消息队列去维护一致性问题,生产/消费模型,还要用到事务完成和回滚。
    其实有些超纲,架构设计要考虑自己业务发展,如果你们发展到这个程度,架构配套肯定也要跟进。我举例的业务场景下,没有那么强的一致性。

    2020-04-28
  • 我来也
    感觉现在的学习门槛越来越高了.😁

    0.要有自己的域名,最好还是备案过的.
    1.需要会排查依赖包缺失的问题.
    2.需要会开通简单的云服务.
    3.需要会配置访问秘钥及授权.
    4.还要会配置函数计算的日志,还需要会看.

    -----------------
    有个疑问咨询下老师:
    如何用一套代码中的不同入口文件部署多个函数计算服务?

    我现在是把代码仓库整个拷贝了一份,
    一个是`cp index-faas.js index.js`,
    另一个`cp rule-faas.js index.js`.
    然后再微调下`template.yml`.

    由于默认的运行时环境指定了入口文件`index.js`,我只能用这个笨办法.
    不知道目前有没有什么简洁的方式.
    [我目前只会使用fun命令行部署服务]

    作者回复: 目前阿里云有个云开发平台,正在内测。最后一课。我会放出来给大家介绍。
    门槛的确会越来越高,带大家走进到serverless的深水区,层层深入。然后,再回头看serverless,你会有不一样的视野。

    2020-04-27
收起评论
6
返回
顶部