架构
文章平均质量分 75
5ycode
这个作者很懒,什么都没留下…
展开
-
数据库分库分表
随着业务的发展,单库单表难以满足我们对性能的要求,在分库之前,可能我们经历了sql调优、索引优化、数据库参数优化、读写分离、使用分布式缓存来降低我们数据库的压力。但是随着业务再一步扩大,以上的方法可能就不适用了;原创 2022-12-16 10:30:57 · 1639 阅读 · 0 评论 -
手把手教你玩maven脚手架
生成脚手架随着新框架的不断稳定(同时也带来了不错的收益),新的项目以及重构项目不断的往新框架上切,基于这个原因,要把新框架整一个脚手架。脚手架中包含了demo(为了学习而框架,实际开发中会有一些便利性的调整)注意事项依赖maven环境,必须配置MVAVA_HOME依赖jdk环境(一定要jdk,不要jre)maven-archetype 的模板使用velocity引入插件以及自定义配置文件先找一个可以跑起来的demo,在pom文件中引入脚手架的maven plugin 我的工程结构如下: 项目地址:原创 2021-11-29 09:18:17 · 2028 阅读 · 0 评论 -
mysql之innodb存储结构
InnoDB,是MySQL的数据库引擎之一,现为MySQL的默认存储引擎,为MySQL AB发布binary的标准之一。InnoDB存储结构以页为单位来管理存储空间;以页作为磁盘和内存交互的基本单位;默认页大小为16kb(所以最少一次从磁盘读取16kb的内容),可以通过innodb_page_size 修改页的大小(在初始化时指定 mysqld --initialize);不同的行格式在磁盘上的存放形式也不同;mysql规定一页中最少存储2行数据页中需要占用的额外空间需要132字节compact 行格式(其原创 2021-08-09 10:05:50 · 275 阅读 · 0 评论 -
链路追踪之sleuth全生命周期分析
背景项目DDD重构后,所有依赖重新整理,试运行期间发现链路追踪的抓取信息不够丰富,就翻下原来的项目源码,再看下对应的改造下。环境依赖kafkaelasticsearch 7.10.0 (jdk11)Kibana 7.10zipkin serversleuth随着微服务的应用,我们运维系统时面临以下问题真实情况的请求链路是什么?链路请求过程中每个耗时了多少?请求的参数以及每个系统的响应是什么?分布式链路追踪解决了以上这些问题(当然需要自己手动扩展下)分布式链路追踪(Distributed Tracing),就原创 2021-08-08 12:03:30 · 496 阅读 · 0 评论 -
一文读懂redis的zset
zset的数据结构在redis中有一个有序列表,它的底层是由压缩列表或跳表组成。我们看下对应的数据结构压缩链表:跳表:下载下来4.0的源码 https://download.redis.io/releases/redis-4.0.0.tar.gz对应的源码:src/server.h# 最大层级#define ZSKIPLIST_MAXLEVEL 32 /* Should be enough for 2^32 elements */# 表示上一层级是下一层级的1/4,相当于是一棵四叉树#d原创 2021-07-23 18:30:47 · 529 阅读 · 0 评论 -
一文读懂布隆过滤器
什么是布隆过滤器?布隆过滤器(Bloom Filter)是1970年由布隆提出的本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构,特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。特点:二进制数组+随机hash空间效率和查询效率都优于一般算法 O(1)有一定的误识别率(散列冲突)删除困难(重合)高并发场景下,防止缓存穿透;数据结构如何快速定位一个元素是否存在?我们通过redis的全局hash表或者hashMap就能解决这个问题; 看上面的数据结构,两个数据结构差不原创 2021-07-22 18:08:42 · 165 阅读 · 3 评论 -
DDD的应用框架实践分享
分享一个DDD的应用框架,写了一个简单的demo。已经在在生产实践。git地址:https://github.com/yxkong/ddd-framework框架结构如下:项目结构如下:示例流程图:简单说明:只启动一个应用在adapter层启动;接口请求到adapter层,调用DistributeController;controller层做上下文转化以及调用application层;application层进行模型依赖构建,以及领域执行前后的特殊处理;domain层进行了业务逻辑实现(和技术框架无关),原创 2021-07-14 19:52:23 · 660 阅读 · 1 评论 -
mysql事务-锁
接之前的事务系列mysql事务-innodb中的redolog详解innodb中的undolog 详解mysql事务-MVCC通过前面几篇文章,我们知道,并发产生的事务,基本上会有写-写,读-写或写-读,也是由于隔离级别的不同,可能会导致脏读、幻读等问题。在这篇(mysql事务-MVCC)文章中,我们了解到读操作通过多版本并发控制(MVCC)来解决不一致的问题。写操作可以通过加锁来解决。先简单的梳理下并发时,更新记录时的加锁机制。到此,我们挂起。加锁 带来的问题脏读脏页:缓冲池已修改,还未刷新到磁盘;脏数据原创 2021-07-04 13:25:31 · 355 阅读 · 1 评论 -
mysql事务-innodb中的undolog 详解
5ycode 被管理耽误的架构师。工作、学习过程中的知识总结与分享,jvm,多线程,架构设计,经验分享等。 26篇原创内容 ...原创 2021-06-12 11:38:02 · 638 阅读 · 1 评论 -
mysql事务-innodb中的redolog详解
redo 日志什么是redo日志?是为了在系统因崩溃而重启时恢复崩溃前的状态而产生的概念,mysql在运行过程中修改数据时由innodb引擎产生的(某个表空间第n号页面中偏移量为m处的值由x更新为y)记录日志,用于保证持久性; redo log从 log buffer 刷入磁盘的时机:log buffer 空间不足;事务提交 (这也是为啥事务会影响性能的点之一);定时刷盘(每秒),通过flush链表服务正常停止;做checkpoint时;innodb_flush_log_at_trx_commit原创 2021-06-05 19:59:40 · 1635 阅读 · 1 评论 -
DDD-领域驱动设计重构的痛点及项目结构的划分
痛点如何分层无领域专家底层数据固定,不想做大的改动值对象、实体、聚合根拆分困难先说如何分层先看下六边形架构 如图我将项目分为四层领域层也是最底层,整个核心的业务逻辑在此封装封装了业务逻辑、定义了领域模型和实体(不对聚合根、值对象、实体做太多的划分)如果业务逻辑设计领域较多,可以封装领域服务此层是面向接口编程,不关注实现数据从哪来,我不管,我就要这样的数据;数据存哪我不管,只要我要的是能能及时给我;基础设施层主要是领域层接口的实现(可能是DB、redis、接口等)技术组件的封装,比如:统一的鉴权,数原创 2021-06-03 21:05:03 · 812 阅读 · 1 评论 -
DDD 领域驱动设计-三个问题思考实体和值对象
来源:博客园DDD 领域驱动设计-三个问题思考实体和值对象https://www.cnblogs.com/xishuai/p/ddd-entity-value-object.html消息场景:用户 A 发送一个消息给用户 B,用户 B 回复一个消息给用户 A。。。现有设计:消息设计为实体并为聚合根,发件人、收件人设计为值对象。三个问题:实体最重要的特性是什么?Message 实体是怎么得来的?发件人、收件人为什么不是实体?1. 实体最重要的特性是什么?《领域驱动设计》5.2 实体:摘录一段:许多对转载 2021-06-01 10:25:55 · 234 阅读 · 0 评论 -
基于springcloud的灰度实现方案(三)-feign调用
基于springcloud的灰度实现方案(一)基于springcloud的灰度实现方案(二)前两篇介绍了灰度方案以及灰度的实现,这篇从feign底层调用上分析一下是如何实现的。首先,我们在feign调用时,使用了FeignClient注解。#接口调用@FeignClient("demo-service")public interface DemoServiceFeginClient {}# 开启feign@EnableFeignClients(basePackages = {"com.yxkong原创 2021-05-24 18:55:06 · 1810 阅读 · 2 评论 -
基于springcloud的灰度实现方案(二)
基于springcloud的灰度实现方案(一)该项目已经上传到github上,地址如下:https://github.com/yxkong/springboot-gray项目说明通过eureka的扩展元数据,标记服务是灰度服务重写Ribbon的RoundRobinRule轮训算法实现灰度路由项目结构说明必须有一个eurekalb-common 公共包com.yxkong.common 项目公共信息的封装com.yxkong.lb 项目中关于Ribbon相关的封装(注意扫描的域的范围)Label基于Round原创 2021-05-22 00:00:44 · 1043 阅读 · 0 评论 -
springboot启动流程分析
之前梳理的springboot的启动流程,大家想了解的可以看下。整个springboot启动的流程,更像是一个大的模板方法。在模板中的每个节点去产生一些具体的事件。springboot在构造的时候就把Listener都拿到了,这些事件触达以后,对应的listener就自动执行。springboot启动入口是整个流程启动的口子。@SpringBootApplicationpublic class Starter { public&原创 2021-05-20 19:38:35 · 173 阅读 · 2 评论 -
基于springcloud的灰度实现方案(一)
5ycode 被管理耽误的架构师。工作、学习过程中的知识总结与分享,jvm,多线程,架构设计,经验分享等。 20篇原创内容 ...原创 2021-05-20 19:25:34 · 502 阅读 · 5 评论 -
代理模式详解
什么叫代理模式?代理模式是在不改变原始类(或叫被代理类)代码的情况下,通过引入代理类来给原始类增加功能。代理对象在在原始类和代理类之间起到了中介作用。代理模式的目的:保护原始类;增强原始类;我们在生活中的经常遇到这样的场景如:房屋中介、猎头等。中介保护了我们的隐私,我们除了提供基本的房屋买卖、找工作等需求,中介会通过自己的资源、渠道等帮我们实现,我们本来的意愿并没有改变。静态代理了解下yxkong要通过贝壳去买房的过程。买房的流程/** * 买房要求 * @author yxkong原创 2021-05-14 12:18:54 · 372 阅读 · 2 评论 -
从一次图文消息推导微信发文流程
这几天玩了下消息公众号,写了几篇文章,也群发了下,用了以后发现和我想象的不太一样。先把我在这个过程中的问题回想一下吧。公众号不群发不会对外展示;公众号预览为什么有有效期,还限制访问人?;公众号群发后,修改消息保存,信息不会同步到已群发的消息里;已群发的消息不能撤回,只能删除;上图分析下。经过分析得出以下结论:1,对外展示的都是生成的静态页面;2,预览是生成了有有效期的缓存,过期失效;3,除了修改错别人,工作号不允许修改内容(可能是静态文件生产以及cdn加速的成本较高);4,撤回对于接收消息的用户的体验不是特原创 2021-04-07 10:32:50 · 159 阅读 · 0 评论 -
zookeeper集群搭建
前置条件添加host映射可省略下载zookeeper安装包并解压配置zoocfg文件创建myid节点文件启动集群指定使用的jdk版本查看集群状态添加自动启动前置条件已有服务器并安装好jdk1.8 192.168.18.7 192.168.18.22 192.168.18.23添加host映射(可省略)vim /etc/hosts192.168.18.7 dev7192.原创 2017-12-06 14:33:23 · 254 阅读 · 0 评论 -
nginx配置说明
#普通配置#==性能配置#运行用户user nobody;#pid文件pid logs/nginx.pid;#==worker进程数,通常设置等同于CPU数量,auto为自动检测worker_processes auto;#==worker进程打开最大文件数,可CPU*10000设置worker_rlimit_nofile 100000;#全局错误日志error_log lo原创 2017-12-11 18:42:52 · 205 阅读 · 0 评论 -
mysql gtid模式主从复制搭建
配置前提主库1921681822配置从库1921681823配置重启主从数据在主库上创建复制用户启动从库上的复制线程查看跳过指定事务配置前提要在MySQL 5.6中使用复制功能,其服务配置段[mysqld]中于少应该定义如下选项: - binlog-format:二进制日志的格式,有row、statement和mixed几种类型; - 需要注意的是:当设置隔离级别为REA原创 2017-12-11 18:32:30 · 456 阅读 · 0 评论 -
centos rpm方式安装mysql
卸载原有的mysql下载安装自定义目录修改配置文件初始化数据库启动数据库服务登录并修改密码开启远程访问设置开机启动原创 2017-12-11 18:31:01 · 889 阅读 · 0 评论