关于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网关(本文) 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...
随机推荐
- 洛谷P4364 [九省联考2018]IIIDX(线段树)
传送门 题解看得……很……迷? 因为取完一个数后,它的子树中只能取权值小于等于它的数.我们先把权值从大到小排序,然后记$a_i$为他左边(包括自己)所有取完他还能取的数的个数.那么当取完一个点$x$的 ...
- Qt之界面(自定义标题栏、无边框、可移动、缩放)
效果 自定义标题栏 titleBar.h #ifndef TITLEBAR_H #define TITLEBAR_H #include <QLabel> #include <QPus ...
- 员工管理系统(集合与IO流的结合使用 beta2.0 ObjectInputStream/ ObjectOutputStream)
package cn.employee; import java.io.Serializable; public class Employee implements Serializable{ pri ...
- VS Code 设置取消打开文件目录的自动定位跟踪功能。
文件-->首选项-->设置-->在搜索栏中搜索:explorer.autoReveal; 去掉勾选即可.
- 学习笔记 第六章 使用CSS美化图片
第六章 使用CSS美化图片 6.1 在网页中插入图片 GIF图像 跨平台能力,无兼容性问题: 具有减少颜色显示数目而极度压缩文件的能力,不会降低图像的品质(无损压缩): 支持背景透明功能,便于图像 ...
- mac系统 usr/ 目录下无法新建文件夹???
这个问题是在操作mongodb的时候遇到的,很苦恼.目前已经解决,将解决方法分享给各位遇到同样问题的你们. 1.重启电脑,开始关机就立马按住command+R,进入macOS恢复功能界面,进入的时间可 ...
- H.264学习笔记4——变换量化
A.变换量化过程总体介绍 经过帧内(16x16和4x4亮度.8x8色度)和帧间(4x4~16x16亮度.4x4~8x8色度)像素块预测之后,得到预测块的残差,为了压缩残差信息的统计冗余,需要对残差数据 ...
- opencv-flag
http://blog.csdn.net/yiyuehuan/article/details/43701797 在Mat类中定义了这样一个成员变量: /*! includes several bit- ...
- hibernate4+spring4+struts2的Maven中的pom.xml文件的配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- leetcode_894. All Possible Full Binary Trees
https://leetcode.com/problems/all-possible-full-binary-trees/ 给定节点个数,求所有可能二叉树,该二叉树所有节点要么有0个子节点要么有两个子 ...