[Day26] Micro Services

在前几天的 App Engine 与 K8S 中,或许我已经大致的提过 Micro Services ,今天来试着更详细的介绍 Micro Services 的概念。

Micro Services 不限於任何的程序语言,无论 Python、Node.JS 或 Go 都有办法实现,它最大的特色就是「模组化」,把一个大程序给切割成一块一块的模组,方便维护与管理,当面对一个非常庞大的系统时, Micro Services 也可以快速的定位发生的问题。

与 Micro Services 相对的是 Monolithic application 单体式应用程序,也就是将所有的功能全部写在一起,这种方式以连接角度而言,设计会比较单纯与简单,开发时程上也会比较快。但当整个系统日益增大,则维护上会较为困难。

相较於单体式程序,微服务还有另外一个特色是可以快速的将任何一个模组进行扩展,假设我们有一个销售网站,而微服务切分了物品的展示前端,与实际购买,处理订单的後端。在双 11 等活动时,假设我们已知大多数的客户已经将需购买的商品加至购物车,这种情形下,我们就可以单纯的透过 K8S 的 Scaling 相关设定,设定扩展销售後端的模组,而不需要连同前端一起进行扩展,减少租用机器的费用。

微服务最大的特点就是每个服务应该独立自主,因此服务间最好需要有独立的资料库,服务间唯一的沟通方式是透过 API (最常见的是透过 RESTful) 进行交互。

12 Factor App Design

基於 Micro Services 设计的 SaaS 最佳实践方式,目前最有名的是 The 12-Factor App ,关於相关的介绍可以参考去年 Miles 大大的铁人赛文章。简单来说,我们的开发过程可以遵守 12 Factor 的方式,有效的开发方便移植、扩展的程序。而这 12 Factor 依序是:

  1. Codebase
    • 使用版本管理系统,例如 Git。
  2. Dependencies
    • 使用套件管理系统,例如 pip、npm。
  3. Config
    • 不要将 API Key 等机密资料放至於程序码字串中。
  4. Backing services
    • 资料库,快取等资源可藉由 URL API 访问。
  5. Build, release, run
    • 严格分离程序码的 Build 与 Run 阶段。
  6. Processes
    • 一个程序可分为一个或多个 Process,每个 Process 应为 stateless。
  7. Port binding
    • 透过 Port binding 方式让程序可以联外。
  8. Concurrency
    • 透过 Process Model 进行水平扩展。
  9. Disposability
    • 快速启动,追求稳定性,并可以优雅的关机。
  10. Dev/prod parity
    • 保持开发与部属的环境一致。
  11. Logs
    • 将 Log 透过 event Stream 输出。
  12. Admin processes
    • 将维护与管理视为一次性的任务。

<<:  PPT in Operating system

>>:  Day 26:v-if 才做选择,v-show 全都秀

[PHP][Laravel][Blade]如果想要在画面中,限制显示字数,该怎麽做呢?

假如说,我想要让这篇文章预览画面中黄色框框的部分不要显示这麽多的文字,我可以利用Str::limi...

Wentz QOTD CISSP练习题原创声明

所有经过(ISC)²认证的资讯安全专业人员都承认,取得认证是一种特权,它必须花费心力取得并且持续维...

00 - 这是一本网页开发工具的兵器谱

Hello, World! 我是 Peter ,在网页开发时,为了完善专案的功能与确保程序码的品质,...

DAY28 第一个完整程序练习,一台计算机!(三)

今天我们要来讲剩下的方法 public void time(View view){ if (reco...

Day-00 引言

简简单单的开场白 这个系列的文章一开始是没有想到要出生的,但是在因缘际会之下,成为了学校深度学习课程...