一:什么是微服务?

  微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。 系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。 每个微服务仅关注于完成一件任务并很好地完成该任务。 在所有情况下,每个任务代表着一个小的业务能力。

  当然啦,关于微服务还有很多种定义,并没有一个官方的标准,通常在解释微服务的时候,通常会提起一种面向服务的架构——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构建微服务的思考(一)的更多相关文章

  1. Chris Richardson微服务翻译:构建微服务之微服务架构的进程通讯

    Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯(本文) 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...

  2. 技术分享:Dapr,让开发人员更轻松地构建微服务应用

    最近一直在学习微服务相关的技术.微服务架构已成为构建云原生应用程序的标准,并且可以预见,到2022年,将有90%的新应用程序采用微服务架构.微服务架构提供了令人信服的好处,包括可伸缩性,松散的服务耦合 ...

  3. [译]Spring构建微服务

    此文为译文,原文地址 介绍 本文通过一个使用Spring.Spring Boot和Spring Cloud的小例子来说明如何构建微服务系统. 我们可以通过数个微服务组合成一个大型系统. 我们可以想象下 ...

  4. 构建微服务:Spring boot

    构建微服务:Spring boot 在上篇文章构建微服务:Spring boot 提高篇中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jp ...

  5. 如何使用 Java 构建微服务?

    [编者按]微服务背后的大理念是将大型.复杂且历时长久的应用在架构上设计为内聚的服务,这些服务能够随着时间的流逝而演化.本文主要介绍了利用 Java 生态系统构建微服务的多种方法,并分析了每种方法的利弊 ...

  6. 构建微服务-使用OAuth 2.0保护API接口

    微服务操作模型 基于Spring Cloud和Netflix OSS 构建微服务-Part 1 基于Spring Cloud和Netflix OSS构建微服务,Part 2 在本文中,我们将使用OAu ...

  7. 基于Spring Cloud和Netflix OSS构建微服务,Part 2

    在上一篇文章中,我们已使用Spring Cloud和Netflix OSS中的核心组件,如Eureka.Ribbon和Zuul,部分实现了操作模型(operations model),允许单独部署的微 ...

  8. 构建微服务(Building Microservices)-PDF 文档

    闲时翻译了几篇基于Spring Cloud.Netflix OSS 构建微服务的英文文章,为方便分享交流,整理为PDF文档. PDF 文档目录: 目录 一.微服务操作模型... 3 1.     前提 ...

  9. Chris Richardson微服务翻译:构建微服务之使用API网关

    Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关(本文) 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服 ...

随机推荐

  1. bzoj 2194: 快速傅立叶之二【NTT】

    看别的blog好像我用了比较麻烦的方法-- (以下的n都--过 \[ c[i]=\sum_{j=i}^{n}a[i]*b[j-i] \] 设j=i+j \[ c[i]=\sum_{j=0}^{n-i} ...

  2. zoj 2587 Unique Attack【最小割】

    拆点拆魔怔了 直接按照原图建就行,这里有个小技巧就是双向边的话不用按着板子建(u,v,c)(v,u,0)(v,u,c)(u,v,0),直接建(u,v,c)(v,u,c)会快十倍!800ms->8 ...

  3. SELinux的启动和关闭

    1.SELinux简介 SELinux是Security Enhanced Linux的缩写,字面上的意思就是安全强化的Linux,它是由美国国家安全局 (NSA) 开发的,整合到Linux核心的一个 ...

  4. Access operations

    Access operations Accessing elements inside tensors Suppose we have the following tensors: > t = ...

  5. $Edmonds-Karp$[网络流]

    \(原题戳这里\) >最大流最小割定理$(Maximum Flow, Minimum Cut Theorem): $ 网络的最大流等于最小割 具体的证明分三部分 1.任意一个流都小于等于任意一个 ...

  6. iOS 集成React Native到现有iOS应用(Ficow本人实测,Xcode 8.3,iOS 10.3)

    详细操作步骤,请 参考官方文档  或者翻译文档 ! 我补充一些必要的注意事项: 1.引入React.a文件.配置User Header Search Paths 引入React.a文件(点击+可以看到 ...

  7. QT5每日一学(二)编写QT多窗口程序

    一.添加主窗口 1.首先打开Qt Creator,新建Qt Widgets Application,项目名称设置为windows,在类信息界面保持基类为QMainWindow.类名为MainWindo ...

  8. Linux环境下SolrCloud集群环境搭建关键步骤

    Linux环境下SolrCloud集群环境搭建关键步骤. 前提条件:已经完成ZooKeeper集群环境搭建. 一.下载介质 官网下载地址:http://www.apache.org/dyn/close ...

  9. Android开机自启动

    1.原理 当Android启动时,会发出一个系统广播,内容为ACTION_BOOT_COMPLETED,它的字符串常量表示为 android.intent.action.BOOT_COMPLETED. ...

  10. jmeter(十四)解读聚合报告

    一个每天1000万PV的网站需要什么样的性能去支撑呢?继续上一篇,下面我们就来计算一下,前面我们已经搞到了一票数据,但是这些数据的意义还没有说.技术是为业务服务的,下面就来说说怎么让些数据变得有意义. ...