关于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网关(本文) 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...
随机推荐
- 【优化算法】Greedy Randomized Adaptive Search算法 超详细解析,附代码实现TSP问题求解
01 概述 Greedy Randomized Adaptive Search,贪婪随机自适应搜索(GRAS),是组合优化问题中的多起点元启发式算法,在算法的每次迭代中,主要由两个阶段组成:构造(co ...
- POJ 1258 Agri-Net(Prim求最小生成树)
Agri-Net Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 64912 Accepted: 26854 Descri ...
- shell脚本从入门到精通
阿里云大学 shell脚本从入门到精通 第1 章 : shell脚本编程-变量-算术表达式-判断语句-if分支语句 第2 章 : case-for-While-双括号-循环嵌套-break-conti ...
- poj3735Training little cats
链接 构造矩阵 快速幂求解 构造矩阵a[i]为每个cati所拥有的花生总数 这里多加一维用来求和,具体是怎么求得可以看下面的一组例子 假设有3个cat a[] = {1,0,0,0} 构造单位矩阵来保 ...
- 动态添加出来append的元素加事件
$("body").on("click","#box span",function(){里面执行的东西}) span 是动态添加出来的
- NSoup获取网页源代码
NSoup是JSoup的Net移植版本.使用方法基本一致. 如果项目涉及HTML的处理,强烈推荐NSoup,毕竟字符串截断太苦逼了. 下载地址:http://nsoup.codeplex.com/ # ...
- 程序猿工具——svn
一个项目的产生,都需要团队中的开发人员互相协作.它的简单,方便深深吸引了我. svn的使用,有2部分组成--svn服务器.svn客户端.svn服务器一般团队之间只要有一个安装就可以了. 在学习安装sv ...
- 关于线程间操作无效: 从不是创建控件“xx”的线程访问它,错误解决方法(自定义委托和系统委托Action或Func解决)
这是一个线程不安全的问题.跨线程操作问题. 比如我们需要在线程中改变textbox的文本,textbox的name是txtShowMsg 第一种方法(不推荐使用) 在窗体构造函数中写Control.C ...
- Redis和SpringDataRedis
一.Redis简介 Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库,运行在内存中,由ANSI C编写.企业开发通常采用Redis来实现缓存.同类的产品还有memcac ...
- 460在全志r16平台tinav3.0系统下使用i2c-tools
460在全志r16平台tinav3.0系统下使用i2c-tools 2018/9/6 19:05 版本:V1.0 开发板:SC3817R SDK:tina v3.0 1.01原始编译全志r16平台ti ...