关于Python构建微服务的思考(一)
一:什么是微服务?
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。 系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。 每个微服务仅关注于完成一件任务并很好地完成该任务。 在所有情况下,每个任务代表着一个小的业务能力。
当然啦,关于微服务还有很多种定义,并没有一个官方的标准,通常在解释微服务的时候,通常会提起一种面向服务的架构——SOA,其核心的原则就是将应用组织成一独立的功能单元,可远程访问并单独进行操作和更新,简单来说,就是每个单元都是一个独立的服务,它可以实现业务的一个方面,并通过接口提供功能,虽然SOA清楚地指出服务应当是独立的进程,但是并未强制使用哪种协议进行交互,对于部署和配置还是相当模糊的,SOA服务可以在同一个机器上使用socket通过IPC(进程间通信)方式进行交互,若要使用内存共享,间接消息队列或远程过程调用(RPC),这是一个非常广泛的定义,只要没用在单个进程中运行所有应用,SOA可以是任何东西。
二:传统的单体架构
举例来说:一个商城,除了要有静态的HTML内容外,还必须要有相关的模块,比如用户模块,订单模块,商品模块,优惠券模块等等,当用户对应用进行操作的时候,会伴随着针对数据库的一些SQL操作,然后再经过渲染返回给HTML的页面,整过过程都相当于在一个应用的整体内进行,较少的对外部服务进行网络请求(比如注册时需要请求第三方短信验证),在经典的LAMP架构中,每个传入的请求都会在数据库生成关联的SQL查询,然后服务器再使用模板引擎生成相应的HTML进行响应。

这种架构有很明显的优缺点,优点就是:1.我们可以很容易的开始一个项目;2.简化了数据的设计和组织;3.部署应用也会相对简单
但他也有很明显的缺点:1.我们如果想增加一些功能的时候,修改代码可能会影响到原来不相关的功能,对某部分代码的错误修改可能导致整个应用的崩溃
2.扩展应用的解决方案存在的限制:可部署多个实例,但若期中一个特定的功能占用了所有资源,则会影响整个应用
3.随着应用的迭代,代码库的增长,很难保证代码的干净和可控性。
三.微服务架构
如下图所示:

如上图所示,这些微服务,诸如电子邮件的外部服务,将提供和单体应用相同的功能集,这个架构中的每个 组件都使用HTTP协议进行通信,拖过REST风格的web接口提供服务,每个微服务都在内部处理自己的数据结构,不需要中心化数据库,使用普遍的数据格式如JSON输入输出数据,任何语言都可生成和使用,最后通过HTTP请求和响应进行传输。总体来说,微服务是一个轻量级的应用,它可以通过良好的契约提供一组有限的功能,它是具有单一责任的组件,可独立开发和部署。
微服务架构的优点:
1.分离开发团队的注重点,每个微服务都可由一个团队独立开发,每一次版本迭代只会在服务的内部进行,不会影响其他的应用,低耦合的开发模式,加快项目的进程。
2.如果在现成的微服务应用中进行跨越式的迭代,比如说更换语言和框架,我们可以把它隔离在一个微服务中,使用独立的数据库,让一小部分用户去试验这个方案,从而不影响整个应用的运行
3.更加灵活的扩展与部署,根据微服务的定义,我们可以将服务部署在不同性能的服务器上面,需要消耗CPU的放在性能优良的服务器上面,只消耗内存的(如Redis这种内存数据库)我们可以部署在CPU稍微较差,而内存较大的服务器上,从而减少了部署的成本
有好肯定有坏:
1.微服务若出现不合理的拆分,当你重构一些业务逻辑时,你的代码就会让你搔首踟蹰了,嘻嘻,如果你要实现一些功能,总是要部署两个微服务,或者你改变了一个微服务总会影响另一个数据模型时,你就该考虑合并两个微服务了
2.在微服务的构建过程中,使用了很多的网络交互,这也带来了问题,如有由于网络隔离或服务延迟,“商城HTML”无法及时调用相关的服务,这会产生严重的后果
3.假如用户添加的系统中来,进行某些数据操作时,是不是需要同步每一个服务,这样做会不会产生冗余呢,保持微服务的隔离的同时又要尽量避免数据的重复
4.兼容性的问题,可能会出现版本的不一致
5.测试上的问题,众所周知,产品要部署上线时肯定要经过相应的测试,但是微服务架构是一个分离的架构,不同于单体架构,他需要相应的工具才能进行测试,这也是限制微服务开发的一个难题。
关于Python构建微服务的思考(一)的更多相关文章
- Chris Richardson微服务翻译:构建微服务之微服务架构的进程通讯
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯(本文) 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...
- 技术分享:Dapr,让开发人员更轻松地构建微服务应用
最近一直在学习微服务相关的技术.微服务架构已成为构建云原生应用程序的标准,并且可以预见,到2022年,将有90%的新应用程序采用微服务架构.微服务架构提供了令人信服的好处,包括可伸缩性,松散的服务耦合 ...
- [译]Spring构建微服务
此文为译文,原文地址 介绍 本文通过一个使用Spring.Spring Boot和Spring Cloud的小例子来说明如何构建微服务系统. 我们可以通过数个微服务组合成一个大型系统. 我们可以想象下 ...
- 构建微服务:Spring boot
构建微服务:Spring boot 在上篇文章构建微服务:Spring boot 提高篇中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jp ...
- 如何使用 Java 构建微服务?
[编者按]微服务背后的大理念是将大型.复杂且历时长久的应用在架构上设计为内聚的服务,这些服务能够随着时间的流逝而演化.本文主要介绍了利用 Java 生态系统构建微服务的多种方法,并分析了每种方法的利弊 ...
- 构建微服务-使用OAuth 2.0保护API接口
微服务操作模型 基于Spring Cloud和Netflix OSS 构建微服务-Part 1 基于Spring Cloud和Netflix OSS构建微服务,Part 2 在本文中,我们将使用OAu ...
- 基于Spring Cloud和Netflix OSS构建微服务,Part 2
在上一篇文章中,我们已使用Spring Cloud和Netflix OSS中的核心组件,如Eureka.Ribbon和Zuul,部分实现了操作模型(operations model),允许单独部署的微 ...
- 构建微服务(Building Microservices)-PDF 文档
闲时翻译了几篇基于Spring Cloud.Netflix OSS 构建微服务的英文文章,为方便分享交流,整理为PDF文档. PDF 文档目录: 目录 一.微服务操作模型... 3 1. 前提 ...
- Chris Richardson微服务翻译:构建微服务之使用API网关
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关(本文) 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...
随机推荐
- 小程序 获取地理位置-- wx.getLocation
话不多说直接上栗子 //首先声明变量data:{ showLocationAuth:fasle } //这是第一种逻辑实现方式 点击按钮//当第一次点击授权按钮,用户取消授权之后,就会显示 授权当前定 ...
- 文件系统访问控制ACL设置
1.传统Linux文件系统权限的问题 传统Linux文件系统有三类用户:文件属主-u,组用户-g,其它用户-o,以及三种访问权限:读-r,写-w,执行或目录进入-x,但很多时候并不能满足对文件访问的细 ...
- 【OpenJ_Bailian - 2192】Zipper(dfs)
Zipper Descriptions: Given three strings, you are to determine whether the third string can be forme ...
- poj 2632 Crashing Robots 模拟
题目链接: http://poj.org/problem?id=2632 题目描述: 有一个B*A的厂库,分布了n个机器人,机器人编号1~n.我们知道刚开始时全部机器人的位置和朝向,我们可以按顺序操控 ...
- SIFT特征点检测与匹配
SIFT的步骤如下: (1) 尺度空间极值检测(Scale-space Extrema Detection) 也就是在多尺度高斯差分(Difference of Gauss)空间中检测极值点(3x3x ...
- Solr中的group与facet的区别 [转]
Solr中的group与facet的区别 facet 自己理解就是分组聚合用的, 如下说明 http://blog.csdn.net/a925907195/article/details/472572 ...
- Java对象创建
今天发现一个问题: 如果加上第一个输出,那么两个per1的对象是不一样的,如果不加,那么下一个输出的对象的是和第一个是一致的? 思考为什么???? 代码如下: package com.lgq.serv ...
- CentOS 6.4 php-fpm 添加service 添加平滑启动/重启
nginx通过FastCGI运行PHP比Apache包含PHP环境有明显的优势,最近有消息称,PHP5.4将很有可能把PHP-FPM补丁包含在内核里,nginx服务器平台上运行PHP将更加轻松,下面我 ...
- Bootstrap modal使用及点击外部不消失的解决方法
这篇文章主要为大家详细介绍了Bootstrap modal使用及点击外部不消失的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Bootstrap modal使用及点击 ...
- day22-类的封装、property特性以及绑定方法与非绑定方法
目录 类的封装 两个层面的封装 第一个层面 第二个层面 封装的好处 私有模块 类的propertry特性 setter 和 deleter 类与对象的绑定方法与非绑定方法 类的封装 将类的属性或方法隐 ...