.NET Core 实践一:微服务架构的优点(转)
微服务现在已经是各种互联网应用首选的云架构组件,无论是 BAT 还是 滴滴、美团 ,微服务都是重要的一环。
相对于微服务,传统应用架构有以下缺点:
1. 业务代码混杂,团队成员职责边界不清,团队协作体验不佳,开发效率低下。
传统应用架构中,各个业务模块代码都存在于同一个应用当中,各个业务模块之间交互逻辑复杂,代码统统混在一起,难免出现要去别人代码里改代码的情况
2. 代码耦合度高,日趋臃肿,难以重构,维护成本越来越高。
感受过被F12支配的恐惧吗?
3. 容错能力弱,单点故障引发全局崩溃。
4.无法针对热点业务增加资源,造成浪费。
典型的微服务架构概览
微服务架构按照功能和业务将应用程序分离成若干个部分,使各个部分之间松绑。一个典型的简单微服务架构至少有以下几个部分:
1. UI 层:即前端视觉层,包括 web 端网页、手机APP以及PC客户端。
2. 网关层:网关层类似我们家里用的路由器,可以将入站请求重定向到目标为服务,并将站内的微服务进行整合打包输出到站外。UI层一般会通过 HTTP/HTTPS 协议访问网关向公网暴露的接口。此外,网关还应该具有鉴权的功能。
3. 反向代理:反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。通过在网络各处放置反向代理节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。
4. 微服务集群:根据需求不同,微服务集群中会包含至少1个微服务实例,通过负载平衡将请求分配到每个实例上。如果使用Docker容器服务,则微服务集群中至少包含一个Docker实例,配合负载平衡,我们可以动态的决定要启用多少个Docker实例,并在不需要的时候销毁冗余的实例,提供完全自动化的弹性计算能力。
5. 互操作性:微服务之间一般选用 HTTP/HTTPS 或者 RPC 作为互操作协议,使用JSON或者ProtoBuf序列化对象。由于微服务都部署在同一个内网之中,性能损耗几乎可以忽略不计,如果选用RPC + ProtoBuf 的交互方案,延迟会更低。
微服务架构还有一些不足:
1. 微服务首先强调的是服务规模小,便于服务的伸缩和扩展,但是这也会导致服务碎片化,对人员管理提出了挑战。
2. 微服务是一个分布式的系统,每一个微服务都有自己的数据库,虽然在一定程度上增加了应用程序的整体可靠性,但是也不可避免的带来大量冗余数据。
3. 随着服务规模增长,微服务的实例数量将会飞速增长,比如美国著名的在线电视网站 NetFlix(网飞)有大约600个微服务实例,而且这个数量还在不断地增长。微服务的运维程序将不断攀升。
4. 对于一些业务逻辑十分复杂的业务,可能一次调用便与十几甚至数十个接口相关,为了满足性能需求,我们不得不引入通知系统来异步处理一些内容。异步处理紧接着就带来了数据一致性问题。
以上便是本章内容,如有稍可愚目者,还请不吝赐教。
下一章我将会通过一个例子分析同步执行和异步执行的优劣。
转载自:https://www.cnblogs.com/TO-WW/p/7309346.html
.NET Core 实践一:微服务架构的优点(转)的更多相关文章
- .net core 跨平台开发 微服务架构 基于Nginx反向代理 服务集群负载均衡
1.概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客 ...
- .net core 微服务架构-docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务(asp.net core web api)
本文主要介绍通过Docker来部署通过.Net Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发).统一认证(IdentityServer4).应用服务(asp.net c ...
- .NET Core 微服务架构-Docker部署
本文主要介绍通过Docker来部署通过.NET Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发).统一认证(IdentityServer4).应用服务(ASP.NET C ...
- 从 Spring Cloud 开始,聊聊微服务架构实践之路
[编者的话]随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. ...
- CI Weekly #5 | 微服务架构下的持续部署与交付
CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...
- SpringCloud(一):微服务架构概述
1-1. 系统进化理论概述 在系统架构与设计的实践中,经历了两个阶段,一个阶段是早些年常见的集中式系统,一个阶段是近年来流行的分布式系统: 集中式系统: 集中式系统也叫单体应用,就是把所有的程序.功 ...
- 《Spring Cloud与Docker微服务架构实战》配套代码
不才写了本使用Spring Cloud玩转微服务架构的书,书名是<Spring Cloud与Docker微服务架构实战> - 周立,已于2017-01-12交稿.不少朋友想先看看源码,现将 ...
- Spring Cloud与Docker微服务架构实战 PDF
电子版百度云下载 链接: https://pan.baidu.com/s/115u011CJ8MZzJx_NqutyTQ 提取码: 关注公众号[GitHubCN]回复2019获取 本书的代码 共计70 ...
- Spring Cloud 微服务架构解决方案
1 理解微服务 1.1 软件架构演进 软件架构的发展经历了从单体结构.垂直架构.SOA架构到微服务架构的过程. 1.1.1 单体架构 特点: 1.所有的功能集成在一个项目工程中. 2.所有的功能打一个 ...
随机推荐
- NGUI_创建图集Altas
在project面板下创建一个名为Textures的folder,把事先准备好的贴图素材直接拖到Textures下 2.导航栏NGUI处打开atlas 3.project下新建一个atlas的文件夹, ...
- C++ 使用Lambda
基础使用: C++中的Lambda表达式详解 c++11的闭包(lambda.function.bind) C++ lambda作为函数参数,实现通用的查找接口 C++11系列-lambda函数 进阶 ...
- 《JavaScript 高级程序设计》读书笔记二 使用JavaScript
一 <script>元素 a.四个属性: async:立即异步加载外部脚本: defer:延迟到文档完全被解析再加载外部脚本: src:外部脚本路径: type:脚本语言的内容类型: ...
- 当GDPR来敲门,中国互联网企业该如何应对?
本文来自 网易云社区 . 欧盟<通用数据保护条例>(General Data Protection Regulation,GDPR)已于2018年5月25日正式生效,谷歌.Facebook ...
- 剑指offer面试题24:二叉搜索树的后序遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是返回true,否则返回false. 假设输入的数组任意两个数字都不相同 解题思路:二叉搜索树的特点是根节点的左子树的值小于等 ...
- 【redux】详解react/redux的服务端渲染:页面性能与SEO
亟待解决的疑问 为什么服务端渲染首屏渲染快?(对比客户端首屏渲染) react客户端渲染的一大痛点就是首屏渲染速度慢问题,因为react是一个单页面应用,大多数的资源需要在首次渲染前就加载 ...
- FFmpeg 学习(七):FFmpeg 学习整理总结
一.FFmpeg 播放视频的基本流程整理 播放流程: video.avi(Container) -> 打开得到 Video_Stream -> 读取Packet -> 解析到 Fra ...
- 【Spark调优】小表join大表数据倾斜解决方案
[使用场景] 对RDD使用join类操作,或者是在Spark SQL中使用join语句时,而且join操作中的一个RDD或表的数据量比较小(例如几百MB或者1~2GB),比较适用此方案. [解决方案] ...
- Oracle to_char(参数,'FM990.00')函数
遇到一个SQL,记录一下 select to_char(参数,'FM990.00') from 表格 刚看到FM990.00确实不知道什么意思,通过网上资料,知道了 0表示:如果参数(double或者 ...
- 本地语音识别开源软件pocketsphinx调试总结
1问题一: fatal error: pocketsphinx.h: No such file or directory 解决方法: $ cd /usr/include $ sudo ln -s /m ...