当前位置: 首页 > 编程日记 > 正文

高性能微服务架构设计模式@霞落满天

高性能微服务架构设计模式

主讲:霞落满天

现在企业开发都是微服务架构,但是有很多问题,比如分布式定义,分布式的微服务怎么拆分,什么时候拆分,怎么做到高性能,中台怎么设计,读写分离模式难道仅仅是MySQL做主从就够了么?分库分表怎么使用,缓存和数据库之间怎么保持一致性,领域模型中的CQRS模式又应该怎么结合自己公司的业务呢?面试过程老是被问题一些系统架构相关的问题,怎么面对新问题可以在面试中短短的时间征服面试官?针对这些问题我录制了一期学习视频。有任何学习问题可以给我留言

视频地址:https://edu.csdn.net/course/detail/27256/

课程大纲
开篇 高性能系统架构的分布式理论基础
模型 可无限扩展的AKF立方
问题 亿级QPS的电商网站遇到的问题
模式 CQRS模式进行架构设计
模式 事件溯源模式进行架构设计
结尾 新问题


课程收益
高性能:亿级QPS的电商网站怎么做到高性能?是不是用了分库分表就万事大吉了?如果还不行是不是扩容加机器就可以了?Kafka为什么可以做到那么高性能?怎么实现可以系统接近无限扩容等等。
开发效率:产品提出一个需求,往往改一发而动全身。怎么样既要做到高性能也要做到易维护易扩展?
技术选型:异步解耦,微服务拆分,领域驱动模型设计这些理论怎么用。
面试:突击押宝,短时间帮你把面试常见知识点提纲挈领。
听懂:只有精心设计的课程才能让人听懂。

分布式系统的定义和特征
缘起:首先只有先学习优秀的分布式架构自己才可以做出优秀分布式架构,第二不管多么炫的技术架构,后面的一些分布式思想和理论都是很多年前的,最少也是15年前的。
现状:关于分布式系统的定义其实现阶段也并没有得到普及,一些分布式的经典著作有定义,但是不统一。大家都在说分布式系统,但是很多人包括一些架构师并没有理解分布式,做系统架构并不是分布式的,如果访问量很小不会显现出问题,如果访问量很大就会暴露很大问题,这时候可能会用一些不太好的方案来解决问题,比如乱加机器,甚至有时候加机器也解决不了问题。
定义:分布式系统是其组件分布在联网的计算机上,组件之间通过传递消息进行通信和协调的系统。
特征:组件的并发性,缺乏全局时钟,组件故障的独立性。
关键技术:名字服务,间接通信,复制技术,分布式事务。

正交性设计:

定义:两条直线相交成直角,就是正交的。正交也就是两条直线互不依赖。如果一个系统的变化不影响另一个系统这些系统就是正交的。
直接应用正交性原则,构建的系统的质量可以得到很大提高,可以让你的系统易于设计、开发、测试及扩展上线。
高内聚:每个服务是功能独立单一的。系统与系统之间,服务与服务之间是独立互相独立,隔离的。
正交的好处:提高开发效率,降低风险。

举例Kafka为什么是分布式的
Kafka 是最流行的消息中间件,有别于RabbitMQ, RabbitMQ不是真正意义上的分布式系统,因为他没有做到分布式,他只是做了镜像。阿里巴巴开源的RocketMQ也是分布式的系统。
Kafka的消息通过Toplic(主题)进行分类,这就好比数据库的表,或者文件系统里的文件夹。 Toplic可以被分为若干个Partition(分区),一个分区就是一个提交日志。消息以追加的方式写入分区。
分区可以并发读写,提高性能。数据在多节点之间复制提高可用性。

间接通信:对于分布式系统,间接的概念也越来越多地应用于通信范型。间接通信被定义为在分布式系统中实体通过中介者进行通信,没有发送者和接受者之间耦合,中介者的确切特性随方法的不同而不同。

空间解耦:发送者不知道也无需知道接收者,接收者也同样无需知道发送者,因为空间解耦使得系统开发者有很大的自由去处理改变:参与者可以被替换,更新,复制甚至迁移。

时间解耦:发送者和接收者可以有独立的生命周期,也就是说发送者和接收者不需要同时存在才可以通信,发送者可以随时进入离开。

tips:所有计算机问题,都可以通过引入一个新的间接层次来解决,那些已经有过多间接层次的问题除外。(1965年剑桥Titan项目)

分布式系统在电商微服务中台的表现
电商业务中台微服务拆分为商品中心(商品详情+商品列表),购物车中心,订单中心,用户中心。
微服务镜像部署在不同的服务器上。
好处:高内聚,低耦合,易维护,易扩展。
问题:分布式事务,调用链复杂,一致性问题等…

标准CQRS模式
实现:标准CQRS由命令模型和查询模型组成,这是按照领域模型来设计的,命令模型实现新增,更新,删除操作,查询模型订阅命令端发布的事件并更新查询视图,最终视图是最新的,有时候需要添加新视图来支持不同的查询类型。
查询模型使用的数据库不限于MySQL也可以是ES,Redis,MongoDB等。


事件溯源模式简介
Event Sourcing Pattern代表事件溯源模式也有称为事件源模式。使用仅追加存储来记录描述在域中对数据执行的操作的完整系列事件,而不是仅存储当前状态,以便可以使用该存储来实现域对象。
通过避免同步数据模型和业务域的需求,该模式可以简化复杂域中的任务。提高性能,可伸缩性和响应能力;提供交易数据的一致性;并保持完整的审计追踪和历史记录,以支持采取补偿措施。

下面是课程的一些精彩截图:

 

相关文章:

【数据结构】顺序栈的实现(C语言)

栈的基本概念及其描述 栈是一种特殊的线性表,规定它的插入运算和删除运算均在线性表的同一端进行,进行插入操作和删除操作的那一端称为栈顶,另一端称为栈底。 栈的插入操作和删除操作分别称为进栈和出栈。 FILO(First In Last …

iOS绘制图片与文字

2019独角兽企业重金招聘Python工程师标准>>> #####绘制图片与文字 #####1.绘制图片,直接代码说明 加载图片 #pragma mark - 小黄人 -(void) drawImage:(CGRect) rect{UIImage *image[UIImage imageNamed:"黄人"];//图片有可能显示不全&#xf…

php-fpm慢执行日志

vim /usr/local/php-fpm/etc/php-fpm.d/www.conf//加入如下内容request_slowlog_timeout 1slowlog /usr/local/php-fpm/var/log/www-slow.log 测试:/usr/local/php-fpm/sbin/php-fpm -t/etc/init.d/php-fpm reloadls ../../var/log/ //生成日志php-fpm.log www-sl…

spring springboot springcloud常用注解

SpringBootApplication 组合注解,用在启动类上,源码: Retention(RetentionPolicy.RUNTIME) SpringBootConfiguration EnableAutoConfiguration ComponentScan public interface SpringBootApplication SpringBootConfiguration Configurat…

解决eclipse ctrl+鼠标左键不能用

选择【Window】菜单 Preferences ——>General——>Editors——>Text Editors——>Hyperlinking 把勾都点上,然后确定KEY 值为 crtl

【数据结构】顺序队列的实现(C语言)

队列的基本概念及其描述 队列是一种特殊的线性表,它的特殊性在于队列的插入和删除操作分别在表的两端进行。 插入的那一端称为队尾,删除的那一端称为队首。队列的插入操作和删除操作分别称为进队和出队。 先进先出(First In First Out&…

ethereumjs/ethereumjs-vm-2-API文档

https://github.com/ethereumjs/ethereumjs-vm/blob/master/docs/index.md vm.runBlockchain Processes blocks and adds them to the blockchain 处理区块并将其添加到区块链中 Parameters输入参数 blockchain Blockchain A blockchain that to process 一个处理的区块链cb Fu…

qt 拖拽 修改大小(二)

最近项目需要实现windows下橡皮筋的效果,所以对此做了一些了解,特此记录。 首先windows系统是支持橡皮筋效果的,需要使用win32方 法:SystemParametersInfo(SPI_SETDRAGFULLWINDOWS, showFullWindow, NULL, 0);showFullWindow是一个…

互联网大厂技术面试内幕@霞落满天

很多求职者往往并非因为技术不好,而是没有掌握面试的技巧导致不能把握机会,本课程的目的就是本课程先通过比较真实的好简历和不好的简历让大家明白自己的简历有哪些问题,事实上简历是大厂的敲门砖,非常重要,很多人得不…

【数据结构】顺序表的应用(1)(C语言)

问题: 1.将顺序表(a1,a2,…,an)重新排列以a1为界的两部分:a1前面的值均比a1小,a1后面的值均比a1大(这里假设数据元素的类型具有可比性,不妨设为整型)。 头文件与该头文件一样:【数据结构】顺序…

比特币寒冬中,你更应该关注企业区块链!

公众对区块链的认识也许限于比特币或以太坊,但很多却不知道 Hyperledger(超级账本)。Hyperledger Fabric,是由 IBM 带头发起的一个联盟链项目,2015 年末移交给 Linux 基金会,成为开源项目。Linux 基金会孵化…

JVM XMX设置多大比较好,Docke容器里该怎么设置JVM呢@无界编程

XMX是JVM的最大堆内存大小,XMS是JVM的初始堆内存大小。 不管是工作还是面试经常遇到一个问题就是XMX到底设置多大比较好? 网上的答案大多是说XMX和XMS设置为一样大,但是没有说到底XMX设置多大比较好。 如果设置为和操作系统一样大内存会怎么样? 这篇文章就带你搞清楚这…

【数据结构】顺序表的应用(2)(C语言)

问题: 2.有顺序表A和B,其元素均按从小到大的升序排列,编写一个算法,将它们合并成一个顺序表C,要求C的元素也按从小到大的升序排列。 头文件与该头文件一样:【数据结构】顺序表的实现(C语言&am…

OWA登录页面显示为英文而不是中文

-----提供AD\Exchange\Lync\Sharepoint\CRM\SC\O365等微软产品实施及外包,QQ:185426445.电话18666943750故障描述:WIN10操作系统使用IE登录OWA的时候,界面语言为英文,WIN10操作系统为中文系统,区域语言都是设置为中文&…

java B2B2C springmvc mybatis多租户电子商城系统-Spring Cloud Feign

1、什么是Feign? 愿意了解源码的朋友直接企鹅求求:二一四七七七五六三三 Feign 的英文表意为“假装,伪装,变形”, 是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求,而不用…

【数据结构】顺序表的应用(3)(C语言)

问题: 已知一个顺序表中的各节点值是从大到小有序的,设计一个算法,插入一个值为x的节点,使顺序表中的节点仍然是从小到大有序的。 头文件与该头文件一样:【数据结构】顺序表的实现(C语言) #i…

从源码和内核角度分析redis和nginx以及java NIO可以支持多大的并发

有人询问我网上一篇关于“redis为什么单线程这么快”的文章,我建议他不要看了,因为redis是单进程不是单线程,后面的意见不用看了,文章质量肯定不会很好,他也说了自己看了很久源码似乎还是有些云里雾里,所以我就给他分析了为什么redis这么快,这篇主要讲epoll的实现。 从…

背景图片等比缩放的写法background-size简写法

1、背景图片或图标也可像img一样给其宽高就能指定其缩放大小了。 比如一个实际宽高36*28的图标,要缩小一半引用进来的写法就是: background:rgba(0, 0, 0, 0) url("../images/report_icon2x.png") no-repeat scroll left center / 18px 14px; …

深入了解以太坊

正在看这篇文章的你,应该是一名被区块链技术所吸引的开发者或者极客。我相信你已经理解了区块链的技术原理,并急切地想要搞清楚这项技术将为你和你的开发技术栈带来怎样的影响。 如果你需要更基础的区块链技术介绍,可以阅读比特币和以太坊的白…

Netty和JDK源码来看Netty的NIO和JDK的NIO有什么不同

JDK底层提供了NIO实现,在Linux环境会调用内核epoll。 但是Netty通过JNI的方式提供了Native Socket Transport,为什么Netty要自己搞一套NIO呢? 这篇文章带你从jdk的源码和Netty的源码角度来分析为什么Netty要这么做。 JDK源码:openjdk-8u40 Netty源码:netty-4.1 1.先看J…

【数据结构】单链表的实现(C语言)

单链表是线性表链式储存的一种形式,其中的结点一般含有两个域,一个是存放数据信息的info域,另一个是指向该结点后继结点存放地址的指针next域。一个单链表必须要有一个首指针指向链表中的第一个结点。 单链表要掌握以下几种操作:…

《理解 OpenStack + Ceph》---来自-[爱.知识]-推荐

企业IT技术分享(2016-06-29)来自(QQ群:企业私有云平台实战 454544014-推荐)!理解 OpenStack Ceph (1):Ceph OpenStack 集群部署和配置http://www.cnblogs.com/sammyliu…

windows10 安装 mysql8.0.12 详解

【1】下载安装包 官网下载地址:https://downloads.mysql.com/archives/community/ 如下图所示: 下载完成,安装包为mysql-8.0.12-winx64.zip 【2】安装准备 (1)安装路径。拷贝安装包到任意路径,然后解压缩。…

IDEA常用和实用配置以及各种必要插件

主要是收集IDEA常用和不常用配置陆续更新 ------------------------ 启动项目配置 建议使用idea2021.1.3以上版本: ------------------------ maven没有设置自动导包,导致引用不到第三方依赖。 可以点maven的刷新按钮即可。 idea 设置gradle自动更…

linux 调试利器gdb, strace, pstack, pstree, lsof

1)如何使用stracepstack利器分析程序性能?http://www.cnblogs.com/bangerlee/archive/2012/04/30/2476190.html此文有详细介绍怎么用strace和pstack2)Linux下多线程查看工具(pstree、ps、pstack)?http://blog.csdn.net/yfkiss/article/details/67293643)使用strace,lstrace,t…

【数据结构】单链表的应用(C语言)

1、设计一个算法,求一个单链表中的节点数 2、设计一个算法,在一个单链表中值为y的结点前插入一个值为x的结点(值为x的新结点为成为值为y的结点前驱结点) 3、设计一个算法,判断单链表中各结点是否有序 4、设计一个算…

物联网设备僵尸网络趋势分析

物联网(IoT)僵尸网络作者正在适应更安全的物联网设备的转变,这已经将***者的注意力转移到利用物联网设备的漏洞上。由于物联网设备安全性仍处于起步阶段,因此发现命令注入等基本漏洞并不少见。2018年11月,NetScout的As…

Redis6安装配置集群cluster以及集群宕机注意事项

Redis6的cluster模型推荐3主3从 先准备3台服务器,每个上面部署2个redis,服务器配置2核2G: 下面在每台服务器安装redis6,每台机器只要安装一次即可,然后分别配置2个端口的conf文件,分别起来即可&#xff1a…

【数据结构】循环单链表的实现(C语言)

循环单链表应掌握以下基本操作: 1、建立一个空的循环单链表。 2、获得循环单链表的最后一个结点的位置。 3、输出循环单链表中各结点的值。 4、在循环单链表中查找值为x的结点。 5、在循环单链表中第i个结点后插入值为x的新结点。 6、在循环单链表中删除值为x…

DTRACE 专家

http://dtrace.org/blogs/bmc/ https://github.com/bcantrill http://www.tudou.com/programs/view/Q6fHZFgZww4 http://dtrace.org/blogs/ahl/2012/04/24/btrace-dtrace-for-java-ish/ JAVA https://github.com/chrisa https://github.com/ahrens