微服务的由来

微服务最早由Martin Fowler与James Lewis于2014年共同提出来的,但是微服务也不是一个全新的概念,它是由一系列在实践中获得成功并流行起来的概念中总结出来的一种模式,一种概念。而这一系列的概念大体上有这些:
领域驱动设计(DDD),持续交付,按需虚拟化,基础设施自动化,小型的自治团队,大型集群系统。

领域驱动设计(DDD)

DDD中我们关心了三个概念:领域建模,限界上下文,职责。这三个概念能很好的帮我们在微服务中按照业务分割出足够小且高内聚低耦合的服务, 这也是Evans 在《领域驱动设计》一书中的比喻 “细胞之所以会存在,是因为细胞膜定义了什么在细胞内,什么在细胞外,并且确定了什么物质可以通过细胞膜”,我们每个服务都应该是有自己的职责或者可以说要满足单一原则,要尽量保证内聚,并且要定义好与外部的交互。

持续交付

以往也包括现在的很多公司,生产环境的发布几乎总是痛苦的事情,凌晨或者周末加班加点进行发布而且很可能一出问题就是全部回滚到上一个版本。但是现在, 因为实行了持续交付,团队在一天内都可能在生产环境发布很多次。
持续集成,持续交付已经是现代软件很重要的一个特性,对软件产业产生了深远的影响,当然这一特性也跟微服务紧密的结合在一起了。 当然单体架构在持续交付方面的问题太显著了,但是微服务在这一方面确实优势明显。 微服务系统设计开始就是拆分为独立自治的一些服务的集合,每次的持续交付我们只需要关注某个或者某些微服务的交付,从而在很大程度上减少了持续交付的工作量和风险。当然这就要保证各个服务之间的低耦合,在一个服务更改的时候不会带消费方带来影响。

按需虚拟化

系统在高并发的时候总是会遇到性能瓶颈,但是瓶颈一般不是存在在整个系统而是在某几个特有的模块比如说订单,也不是说会一直存在瓶颈比如双11。所以按需进行扩展是必要解决的问题。而对于微服务,我们借助虚拟化平台,可以单独的为某个服务按需创造机器并调整大小。

基础设施自动化

这个其实跟按需虚拟化可以一起的,当我们需要水平扩展的时候,不可能为每次创造的机器进行一番部署,所以我们需要基础设施的自动化来帮组我们完成方便快捷的扩展

小型的自治团队

自治团队,可以对应到自治服务。一个独立的服务,可以语言自由,架构自由,集成自由,部署自由,我们只需要保证团队做出来的东西满足一定的条件就可以完全作为一个独立的单元来进行开发管理维护。

什么是微服务

==微服务就是一些协同工作的小而自治的服务。==

小,专注于一件事

这个就是我们常常说的职责单一。


在我的职业生涯中,不乏会接手其他人的项目,每每总是会抱怨这个项目代码量太多了,业务逻辑太分散,常常有牵一发而动全身的时候。而微服务则是把职责单一原则应用到服务上,根据业务来划分限界上下文,进而划分出不同的服务,这样每个服务都只用关注到某个限界上下文中,从而很大程度上避免了代码库过大而难以维护的问题。

自治

这是微服务的优点,也一定程度上导致了微服务的复杂性。 自治,代表每个服务是独立个体,所以我们可以自由的进行技术选型,服务之间通信用语言无关的api进行网络通信。也是因为自治,所以我们要保证每个服务能够独立的升级部署而不会对消费者产生影响,避免一个问题出现导致整个系统功能不可用的情况。

协同

虽然我们是一系列不同的个体,但是我们还是一个整体,所以就需要我们各个服务之间有交互有通信,并且需要用某些技术来解决分布式带来的新的问题。

微服务的好处

微服务是分布式的,所以具有分布式的所有好处,而且明确定义了界限上下文,也带来了更多的好处。

技术异构

弹性好(处理服务不可用和功能降级)

扩展方便,成本低

简化部署

与组织结构相匹配

可组合 易于重用完整的功能

对技术替代性的优化

微服务的缺点

当然微服务不是银弹,不是整个软件行业的终极解决方案,总是会存在不可忽视的缺点。同样大部分的缺点也是分布式带来的

性能(内存处理转化为远程调用)

可靠性 (远程调用失败的可能性)

最终一致性

操作的复杂性

因为还没有在实际中使用过微服务,但是对分布式还是有不少实践,所以结合一些书籍,写下了这篇文章做了一下总结。

.Net Core微服务系列--理论篇的更多相关文章

  1. .NET Core微服务系列基础文章索引(目录导航Final版)

    一.为啥要总结和收集这个系列? 今年从原来的Team里面被抽出来加入了新的Team,开始做Java微服务的开发工作,接触了Spring Boot, Spring Cloud等技术栈,对微服务这种架构有 ...

  2. .NET Core微服务系列基础文章

    今年从原来的Team里面被抽出来加入了新的Team,开始做Java微服务的开发工作,接触了Spring Boot, Spring Cloud等技术栈,对微服务这种架构有了一个感性的认识.虽然只做了两个 ...

  3. .NET Core微服务系列基础文章索引(目录导航Draft版)

    一.为啥要写这个系列? 今年从原来的Team里面被抽出来加入了新的Team,开始做Java微服务的开发工作,接触了Spring Boot, Spring Cloud等技术栈,对微服务这种架构有了一个感 ...

  4. .Net Core微服务系列--服务发现

    什么是服务发现 首先我们先思考一个问题,当我们在浏览器中输入一个域名比如baidu.com,然后发生了什么才能让我们访问到百度的网页?简单来说,浏览器会首先从主机的hosts文件中查看是否有baidu ...

  5. .Net Core微服务系列--配置中心

    什么是配置中心 简单来说配置中心就是对配置进行管理的一个中心.对于配置这个司空见惯的东西,我们想想为什么对于应用程序需要各种各样的配置来支撑? 我们人类没有办法掌控和预知一切,所以映射到软件系统这个领 ...

  6. .Net Core微服务系列--开篇

    记得原来有个项目是用wcf做的分布式,不仅横向根据业务拆分了,纵向把业务处理.数据访问等也拆分了成不同的服务,这个是当时公司的产品我也只是一个小小的开发人员所以就不做太多的评论,只是不得不吐槽下调试真 ...

  7. .net core 微服务项目-介绍篇

    项目介绍 1.各种方式连接API都会连接到 APIGateway 来进行统一的分发 Ocelot 2.当api需要授权时 需要请求授权服务 IdentityServer4 3.授权服务对请求进行调用u ...

  8. 【微框架】之一:从零开始,轻松搞定SpringCloud微服务系列--开山篇(spring boot 小demo)

    Spring顶级框架有众多,那么接下的篇幅,我将重点讲解SpringCloud微框架的实现 Spring 顶级项目,包含众多,我们重点学习一下,SpringCloud项目以及SpringBoot项目 ...

  9. .NET Core微服务开发网关篇-ocelot

    通过上篇我们知道,网关是外部访问的统一入口,本文采用Ocelot作为Api网关. 环境要求: vs2019 .NetCore3.1 Ocelot16.0.1 创建一个产品服务Api站点(AAStore ...

随机推荐

  1. Java-Filter-FilterChain-FilterConfig源码

    public interface Filter { /** * Called by the web container to indicate to a filter that it is being ...

  2. Paxos 算法

    1 概述 Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递的一致性算法.[1] ...

  3. C语言算法--统计字符串中单词的个数

    #include <stdio.h> #include <string.h> #include <stdlib.h> int main(void) { int le ...

  4. fastDFS与Java整合上传下载

    由于项目需要整合个文件管理,选择使用的是fastDFS. 整合使用还是很方便的. 准备 下载fastdfs-client-java源码 源码地址 密码:s3sw 修改pom.xml 第一个plugin ...

  5. 超精简易用cocoaPods的安装和使用

    cocoaPods 安装和使用 第一步:替换ruby源 $ gem sources -l                                查看当前ruby的源 $ gem sources ...

  6. CRT 重启Was

    输入用户名.密码登陆以后 # ps -eaf | grep websphere 找到路径 /usr/IBM/WebSphere/AppServer/ 进入/usr/IBM/WebSphere/AppS ...

  7. Mybatis Generator实现分页功能

    Mybatis Generator实现分页功能 分类: IBATIS2013-07-17 17:03 882人阅读 评论(1) 收藏 举报 mybatisibatisgeneratorpage分页 众 ...

  8. Angular集成admin-lte框架

    其实上一篇里面提到的集成datatables.net就是admin-lte里面的一个子插件,不过这个子插件,他是自带types定义文件的,admin-lte这个东西在DefinitelyTyped里面 ...

  9. Django升级1.8的一些问题

    1.最明显的问题当然是Settings设置中关于模板的设置数据结构发生变化,这个就不细说了,你开个Django的1.8的新项目就知道怎么改了 2.migrations问题,这个问题是1.8最主要的修改 ...

  10. ThinkPHP简单的验证码实现

    ThinkPHP简单的验证码实现 写一个最简单的TP验证码. 写Controller 首先在Controller/IndexController.class.php(简称Index)文件中编辑: &l ...