# python-microservice-demo **Repository Path**: welkinhu/python-microservice-demo ## Basic Information - **Project Name**: python-microservice-demo - **Description**: 基于 Python-Flask 的微服务框架 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 7 - **Created**: 2021-05-06 - **Last Updated**: 2022-07-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

微服务架构设计

极客点儿
2020-08-31
![build](./doc/image/build.svg) ![python](./doc/image/coverage.svg) ![docs](./doc/image/docs.svg) ![license](./doc/image/license.svg) ![python](./doc/image/python.svg) ![gitter](./doc/image/gitter.svg) ### 一、微服务 微服务架构非常适合并发量大或者是业务复杂的场景,微服务的核心是高内聚、低耦合。将独立的大项目拆分成一个一个的服务,每个服务可以独立的开发、测试、构建、部署。微服务最大的好处是降低单个系统复杂性。为了能够顺利的进行微服务开发设计,首先需要了解什么是 [微服务架构](./doc/微服务架构.md) 。 ### 二、开发规范 在了解了微服务架构之后,我们知道了微服务架构的核心就是拆分功能服务。 但新的问题接踵而至,不同的服务是由不同的工程师开发,如果大家都按照自己的方式开发多个服务之间很难协同工作,微服务开发团队成员之间的配合度是有要求的,大家都需要共同遵守同一个规范,我们的微服务项目是使用 `Python` 编程语言作为开发主语言。 所以,大家都需要遵守 [PEP8 编码规范](./doc/PEP8编码规范.md)。`PEP8` 是 `Python` 官方给定的标准编码规范,要求非常严格。但在团队正常开发中,如果所有人都严格的完全遵守 `PEP8`,对代码各种吹毛求疵,反而效率会变低。 一般来说,选用 `PEP8` 中核心精华的部分作为 [团队编码规范](./doc/团队编码规范.md) 既符合编码规范的同时还能兼容效率问题。 ### 三、接口规范 除了编码规范以外,其实还有很多规范。微服务对外提供数据通常是以 `API` 的方式提供,这样,我们就需要定义接口开发规范。 接口开发的设计规范有很多,一般常用的 [HTTP 接口设计](https://www.jitao.tech/books/http-api-book/) 适合一般的架构。微服务通常都采用 [RESTful API 架构设计](./doc/RESTfulAPI架构设计.md),本项目是完全遵循 `RESTful API` 架构设计思想和开发规范。 ### 四、数据规范 接口规范确定之后,接下来就需要确定使用哪种数据传输格式。 常见的数据传输格式有 `XML`、`YAML`、`JSON`。其中 `JSON`(`JavaScript Object Notation`),是一种基于文本,独立于语言的轻量级数据交换格式。与 `XML` 数据格式相比,`JSON` 没有附加的任何标记( `XML` 是通过标签标记数据,一般标记比数据还多,在网络传输过程中增加了很多额外的流量),得益于它的轻量,`JSON` 现在是所有 `Web` 应用程序开发的首先数据传输格式。 `JSON` 既然是一种数据传输格式,而且是基于 `JavaScript` 语言,所有也要遵循 [JSON 数据规范](./doc/JSON数据规范.md)。 ### 五、Flask 核心框架 本项目采用的核心框架是 `Flask`。`Flask` 是 `Python` 的 `Web` 开发框架,相比其他的框架,如 `Django` 具有轻量、快速、解耦合、无限制等优势。 我们可以通过 [Flask 精简教程](./doc/Flask精简教程.md) 来快速了解 `Flask` 框架的基础知识、核心理念、开发流程和生命周期。 除了核心框架以外, `Flask` 还提供了相当庞大的组件库供你选择,本项目用到的重要组件有以下几个:[Flask-RESTPlus 组件](./doc/Flask-RESTPlus组件.md)、[Flask-SQLAlchemy 组件](./doc/Flask-SQLAlchemy组件.md)、[Flask-Script 组件](./doc/Flask-Script组件.md)、[Flask-Migrate 组件](./doc/Flask-Migrate组件.md)。其中 `Flask-RESTPlus` 组件是我们重点研究学习的组件,因为它贯穿了整个项目的生命周期。 除了上述几个主要的组件之外,还有很多辅助组件和依赖主键,这些组件可通过 [Flask 官网](https://palletsprojects.com/p/flask/)、[Flask GitHub](https://github.com/pallets/flask) 、[PyPi](https://pypi.org/) 等网站自行查阅。 ### 六、Flask 微服务框架 根据 `Flask` 和 `Flask-RESTPlus` 我们就可以开发微服务了。但是 `Flask` 由于是很灵活的微内核框架,每个项目的目录结构、目录层级、代码编排、依赖关系、架构设计等都是千差万别的。 那么有没有一款类似 `Django` 或者是 `Vue` 的脚手架工具,一键生成我们需要的目录结构呢?很遗憾,到目前从市面上还没有找到。 虽然还没有类似的轮子,但是我们可以自己造啊。经过长时间实际项目开发和经验积累,逐渐摸索出一套架构设计精巧、目录层次合理的框架,[Flask 微服务框架](./doc/Flask微服务框架.md)(`Flask microservices frame`)简称 `FMSF`。 `FMSF` 几乎涵盖了在开发过程中能遇到的所有问题,为了对 `FMSF` 能有清晰的认识,下列列出几项有关 `FMSF` 亮点: - 有着清晰的目录结构、目录层级、代码编排、依赖关系、架构设计等。 - 具有四套环境(开发环境、测试环境、生成环境、单元测试),项目配置可通过环境变量进行自动配置,无需改动任何代码。 - 扩展能力强,不受限于 `Flask` 的约束,可定制扩展项。 - 开发速度快,将复杂繁琐的 `RESTful` 协议封装在底层,工程师无需了解底层的每个细节,只需要关注具体业务服务即可。 - 详细的文档教程、代码详解、测试用例、设计思想和生命周期流程图。 ### 七、服务通信 之间讲过使用微服务架构是为了降低系统的复杂性。其实不然,微服务不是降低复杂性,而是将复杂性转移了,系统将绝大部分复杂性都转移到微服务之间的通信。[微服务通信](./doc/微服务通信.md) 是微服务架构中很重要的一环。 ### 八、项目部署 终于,项目进行到了最后一步,部署上线。因为单个微服务只专注一件事情,典型的高内聚、低耦合,每个微服务都可以独立开发、测试、部署、维护。所以,一般 [微服务部署](./doc/微服务部署.md) 都是采用容器进行部署,每个微服务都运行在一个或多个容器中。