系统设计及业务积累
文章平均质量分 88
业务相关的知识以及架构设计
程序员不鸣
字节跳动后端工程师 | 持续学习,保持敬畏
展开
-
Golang:微服务常用代码分层结构
代码分层结构是一个老生常谈的话题,好的代码结构能够使得系统易于理解、开发及维护,如果代码结构很混乱就会使得不同层级的代码块耦合,导致难以维护和拓展。原创 2023-09-02 17:57:50 · 1360 阅读 · 0 评论 -
系统设计:通用思路之4S分析法
系统设计是一个定义系统架构、功能模块、服务及接口和数据存储等满足特定需求的过程。系统设计是在面向对象设计的基础上更高层次的设计,关注整个系统的架构、组件之间的协作和通信,以及满足系统需求的实现。关键点在于:满足实际需求、具备可拓展性、稳定性等,常见如Twitter、网约车系统设计。原创 2023-08-13 17:58:14 · 696 阅读 · 0 评论 -
ElasticSearch:全文检索及倒排索引原理
ES通常被用于搜索需求中使用,底层原理是倒排索引技术。原创 2023-08-06 23:23:59 · 6478 阅读 · 0 评论 -
系统设计基础-大型网站通用架构模式
系统设计基础,了解大型网站通用架构模式。原创 2023-05-17 14:43:58 · 308 阅读 · 0 评论 -
缓存读写策略:CacheAside、Read/WriteThrough及WriteBack策略
对于缓存的读写来说,通常存在三种使用方式,也就是缓存的三种读写策略:CacheAside、Read/WriteThrough及WriteBack策略。原创 2022-07-23 22:05:05 · 1601 阅读 · 0 评论 -
如何做数据平滑迁移:双写方案
数据迁移指的是将一批数据从同构存储系统(如MySQLA到MySQLB)或异构存储系统(如MySQL-MongoDB)间搬运迁移。数据双写迁移是最常用的一种数据迁移方案,可以保证迁移过程是在线的、迁移前后数据是一致的、迁移过程是可回滚的。数据双写迁移方案分为五大步,分别是:同步、双写、校验、切读、切写。...原创 2022-07-22 10:16:08 · 7517 阅读 · 5 评论 -
数据库写入优化:分库分表及相关问题
数据库写入优化手段之分库分表。原创 2022-07-13 23:14:05 · 938 阅读 · 0 评论 -
数据库查询优化:主从读写分离及常见问题
大部分系统的访问模型是读多写少,读写请求量的差距可能达到几个数量级。当单机MySQL无法承受过高的QPS时,可以组建MySQL主从读写分离集群来将读请求分摊到多个从节点中,以实现水平拓展。原创 2022-06-25 15:36:52 · 877 阅读 · 0 评论 -
高并发系统设计:通用的设计方法及架构分层
极客高并发系统设计课程学习笔记:高并发系统设计常用方法是水平拓展、异步及缓存,并通过系统分层来达到单一职责、易维护及拓展的特性。原创 2022-06-14 22:35:46 · 2163 阅读 · 1 评论 -
SpringBoot使用总结
SpringBoot是近几年兴起的一个用于快速开发的框架,它并没有代替掉SpringMVC、MyBatis等技术,而是提供了一个基于Spring框架的快速整合方式,它的理念是约定大于配置,有更少的配置文件,去完成更多的事情,对于每个Java开发者来说,SpringBoot已经到了必须要被掌握的地步了。一、什么是SpringBoot二、Gradle的介绍及下载配置三、使用Spring...原创 2018-05-13 22:40:11 · 7746 阅读 · 0 评论 -
Golang表格驱动测试
一、单元测试1.0 go testgo test命令是一个按照一定的约定和组织来测试代码的程序。在包目录内,所有以_test.go为后缀名的源文件在执行go build时不会被构建成包的一部分,它们是go test测试的一部分。在*_test.go文件中,有三种类型的函数:测试函数、基准测试(benchmark)函数、示例函数。一个测试函数是以Test为函数名前缀的函数,用于测试程序的一些逻...原创 2019-11-07 23:24:52 · 672 阅读 · 0 评论 -
Golang并发编程-Channel的使用场景分析
Channel是Go中重要且独特的一种并发编程原语,借助其线程安全和阻塞的特性,可以实现信息传递、信号通知、互斥锁、任务编排等场景。原创 2021-07-25 11:20:53 · 1915 阅读 · 2 评论 -
常用设计模式总结
目录:一、策略模式二、观察者模式三、装饰者模式四、工厂模式五、适配器模式六、单件模式七、模板方法模式八、迭代器模式原创 2018-06-06 19:21:22 · 2339 阅读 · 0 评论 -
MongoDB:常见概念及问题总结
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。 MongoDB 文档类似于 JSON 对象的BSON格式存储(实质上是序列化的JSON,存储空间更小)。字段值可以包含其他文档,数组及文档数组。原创 2022-05-14 22:57:34 · 1342 阅读 · 0 评论 -
数据密集型系统设计:索引及存储(B树、LSM树、OLTP及OLAP)
数据密集型应用系统设计-索引及存储章节学习笔记。原创 2022-05-29 12:08:56 · 741 阅读 · 0 评论 -
数据密集型系统设计:数据模型与查询语言(关系、文档及图存储数据模型)
数据密集型应用系统设计-数据模型与查询语言学习笔记。原创 2022-05-22 23:17:00 · 573 阅读 · 0 评论 -
数据密集型系统设计:可靠性、可拓展性及可维护性
数据密集型应用系统设计-可靠性、可拓展性及可维护性章节学习笔记。原创 2022-05-16 23:22:43 · 4087 阅读 · 0 评论 -
容器化的演进:从Docker到Kubernetes
当前,Docker这门容器化技术已经被很多公司采用,从单机走向集群已成为必然,所以对于大规模容器的管理,如果只是依赖于人工手动运维,那么会出现难以管理、管理混乱的问题,而Kuberentes就是为了解决大量容器的管理和运维问题而出现的容器管理平台。原创 2022-04-10 10:01:20 · 1135 阅读 · 0 评论 -
Redis深度历险(3)-集群的相关问题
目录1.CAP理论2.Redis主从复制模型1.什么是主从复制2. 主从复制是异步还是同步的3.主从复制的作用4.主从复制的过程3.Redis Sentinel 哨兵模式1.什么是哨兵模式2.哨兵模式架构3.节点下线4.Leader选举5.为什么需要三个及以上的哨兵4.Redis Cluster 集群数据分区方案1.哈希分区方案2.一...原创 2018-08-25 12:27:24 · 5309 阅读 · 0 评论 -
Kafka架构组成及基础概念
目录一.什么是Kafka1.Kafka有哪些特性2.Kafka有哪些作用二.Kafka中的核心组成1.Producer2.Consumer3.Broker4.Zookeeper5.Topic6.Partition7.Leader & Follower三.Kafka的三种使用模式1.P2P模式2.发布-订阅模式四.Lin...原创 2018-08-25 22:17:35 · 511 阅读 · 0 评论 -
配置Nginx端口转发时的问题
文章目录一、起因二、部署三、端口映射四、暂停/重新启动五、端口映射不起作用Nginx是一款高性能Http服务器,其最大的用途是作为负载均衡和反向代理(端口转发)的工具。一、起因昨天晚上闲来无事,上了下阿里云发现自己的域名和服务器都还没过期,所以就把自己的域名绑定到服务器地址上,做了一个DNS解析。但是我发现,每次需要访问8888端口时仍需要使用 域名:8888 这种方式访问,所以我想用N...原创 2019-01-12 11:12:38 · 8483 阅读 · 6 评论 -
SpringBoot学习笔记(16)-整合JWT做身份验证
文章目录一、导入JWT依赖二、JWTUtil三、JWTInterceptor四、WebConfiguration五、在登陆时产生token传递给前端本文主要参考了以下两篇文章,如果对JWT不熟悉则可以进去了解:http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.htmlhttps://blog.csdn.net/qq...原创 2019-01-22 16:43:06 · 3613 阅读 · 7 评论 -
MySQL基础笔记(10)-实用SQL优化技巧小结
文章目录一、SQL优化的基本思路1.1、数据库表设计角度1.2、业务角度1.3、语句优化角度1.4、数据库自身的设置二、数据库表设计2.1、确定最基本的字段2.2、将整表划分为多表2.3、创建第三方表三、EPLAIN关键字的使用3.1、简单使用3.2、结果解读四、各种SQL优化方法4.1、优化INSERT语句4.2、优化WHERE语句4.3、优化特定的ORDER BY语句4.4、优化GROUP B...原创 2019-02-01 22:12:20 · 500 阅读 · 0 评论 -
MySQL基础笔记(11)-参数优化小结
MySQL服务器内置许多参数,就MySQL5.5版本而言,就有三百多个参数,大部分参数不需要开发者去配置,但是有小部分参数需要开发者熟悉其含义和懂得配置。本文将从以下角度小结一下对于MySQL服务器的性能有较大影响的参数,即内存参数、I/O参数、并发参数、其他参数四个方面展开;本文基于Innodb引擎,MySQL5.5版本。对于MySQL服务器性能来说有许多的影响因素,主要分为以下:1、S...原创 2019-02-09 23:37:57 · 362 阅读 · 0 评论 -
MySQL基础笔记(14)-使用Amoeba和Docker搭建MySQL读写分离架构
文章目录一、搭建MySQL主从复制和主主复制架构二、读写分离架构三、Amoeba的下载和安装2.1、安装配置JDK2.2、下载Amoeba2.3、将其上传并解压授权四、为Amoeba创建MySQL账号五、配置Amoeba服务器5.1、修改amoeba.xml5.2、修改dbServers.xml六、启动Amoeba七、使用AmoebaAmoeba(变形虫)相当于一个SQL请求的路由器,目的是...原创 2019-02-22 21:51:41 · 1204 阅读 · 5 评论 -
算法学习笔记(10)-缓存淘汰算法LRU
文章目录1.1 何谓LRU算法1.2 如何实现1.3 为何不直接使用HashMap作为LRU底层结构今日心情美丽,让咱们看看传说中的LRU算法是怎么一回事1.1 何谓LRU算法LRU算法指的是Least Recently Used,即最近最少使用算法,也被称作缓存淘汰算法/页面置换算法,LRU算法的基本原则是如果一个数据最近很少被访问到,那么之后也应该很少被访问到;如果一个数据最近经常被...原创 2019-09-05 13:05:33 · 325 阅读 · 0 评论 -
JVM学习(6)-JVM工具以及GC调优策略
文章目录一.JVM工具一.命令行工具1.jps2.jstat3.jinfo4.jstack5.jmap6.jhat二.图形化工具1.JConsole2.VirtualVM二.GC调优策略1.什么是GC调优2.GC调优原则2.常用的JVM启动参数3.GC调优策略无需GC调优的情况1.将对象尽可能分配到新生代2.将大对象分配到老年代3.合理设置新生代转移到老年代的年龄Thanks一.JVM工具一....原创 2019-12-11 17:33:16 · 620 阅读 · 4 评论 -
JDK 1.8 流式编程在数据处理方面的应用
Stream流式编程在JDK 1.8版本中与Lambda表达式一起推出,这一特性标志着JDK 1.8成为Java历史上的又一里程碑。之前在公司接手的关于数据分析及展示需求中就会频繁地使用到Stream流式编程。今天来看一看Stream流式编程在数据分析方面的应用及原理,并且这里会再次带大家回顾一下Lambda表达式的使用。原创 2020-07-10 22:28:10 · 996 阅读 · 2 评论 -
Golang与Java各方面使用对比(下)
本文是Golang与Java对比的第二篇,主要对比Golang与Java在面向对象、异常处理、并发编程及垃圾回收方面的差异。原创 2020-10-05 17:25:01 · 5924 阅读 · 4 评论 -
Golang与Java各方面使用对比(上)
本文只对比Golang与Java的基本情况、基本使用、结构体函数及指针三块内容,下一篇文章会对比面向对象、异常处理、并发编程及垃圾回收的差异。原创 2020-10-04 16:42:54 · 16486 阅读 · 8 评论 -
Hadoop-架构、原理、实时计算和离线计算
后端系统通常会有一些需要超大数据集分析的业务场景,比如A/B Test、埋点数据分析、大数据关联图谱等,此时需要存储/分析的数据量以GB甚至是TB作为单位,由于数据量太大,MySQL进行分库分表后虽然可以解决数据存储问题,但是无法做到复杂数据分析及查询,大数据技术就应用在这种业务场景当中。作为一名后端开发者,需要对不同的业务场景选择合适的技术,学习入门大数据技术是有必要的。原创 2021-04-23 23:24:55 · 5491 阅读 · 8 评论 -
ElasticSearch:全文检索及倒排索引原理
全文检索一般是查询包含某一或某些关键字记录,所以通过文档整体值建立的索引对提高查询速度是没有任何帮助的。为了解决这个问题,人们创建了一种新索引方法,这种索引方法就是倒排索引。原创 2021-12-18 15:32:22 · 2525 阅读 · 0 评论 -
MongoDB:海量存储基础-分片架构
分片是数据库中常用的提升存储容量的方式,它基于水平拓展的思想,将大量的数据按一定规则分配到不同的服务器中存储,比如MySQL集群可以借助Sharding-JDBC等外部框架对数据进行分片存储,而MongoDB则提供了原生的分片能力支持。原创 2021-12-11 16:26:42 · 4100 阅读 · 0 评论 -
RocketMQ:与Kafka对比应用场景及组成架构
RocketMQ 是阿里巴巴开源的分布式消息中间件,前身为阿里内部消息系统Notify及MetaQ。RocketMQ被广泛应用于电商、订单、金融等分布式应用领域。原创 2022-01-15 17:26:22 · 1962 阅读 · 0 评论 -
SpringCloud:核心组成架构
Spring Cloud基于Spring Boot框架构建微服务架构,用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。原创 2022-04-03 12:04:31 · 726 阅读 · 0 评论 -
分布式基础-常见分布式ID生成方案
分布式ID即指的是在分布式系统中,全局的唯一标识;分布式ID其实与单机下的ID区别不大,其作用都是起到标识某个订单或数据、消息等,使其在分布式系统中全局唯一。原创 2022-03-19 11:41:32 · 1126 阅读 · 0 评论 -
分布式基础-常见分布式事务解决方案
文章目录一.分布式事务问题及2PC/3PC协议1.单机ACID事务2.分布式事务产生3.两阶段提交协议4.三阶段提交协议二.业务侵入的解决方案1.消息队列1.1、执行过程1.2、优缺点2.TCC1.1、执行过程1.2、并发控制1.3、幂等保证1.4、优缺点3.Saga1.1、执行过程1.2、服务编排1.3、优缺点三.业务非侵入的解决方案1.FMT1.1、执行过程1.2、优缺点2.XA1.1、执行过...原创 2020-04-04 21:12:51 · 1124 阅读 · 0 评论 -
分布式基础-系统性能相关概念
文章目录一.架构的核心要素1、性能2、可用性3、伸缩性4、拓展性5、安全性二.系统性能相关概念1.不同视角下的系统性能2.常见系统性能指标1.响应时间2.并发数量3.吞吐量1.TPS2.QPS4.系统负载3.性能测试分类1.性能测试2.负载测试3.压力测试4.基准测试5.使用JMeter进行测试6.关系图本文主要参考自《大型网站技术架构:核心原理与案例分析》一书第三、四章节和其他网络文章,如有...原创 2020-03-17 19:19:09 · 763 阅读 · 0 评论 -
操作系统-深入理解IO模型与Reactor、Proactor模式
Linux内核给每个进程都提供了一个独立的虚拟空间,并且这个地址空间是连续的,进程就可以通过这个地址空间很方便地访问虚拟内存。用户进程所能访问到的地址空间被称为用户空间,而被Linux内核系统调用或使用的地址被称为内核空间。原创 2020-03-31 00:27:50 · 705 阅读 · 4 评论 -
分布式基础-大型网站架构演进过程
文章目录一.大型网站系统的特点1.大流量2.高并发3.高可用4.海量数据5.用户分布广泛6.网络情况复杂7.敏捷开发和快速迭代8.安全环境恶劣二.大型网站架构演进过程1.单机时代2.多机时代3.缓存时代4.集群时代5.读写分离时代6.反向代理与内容分发网络7.底层服务集群化8.搜索引擎技术与NoSQL9.服务拆分与微服务化本文主要参考自《大型网站技术架构:核心原理与案例分析》一书第一章节和其他...原创 2020-03-13 15:10:03 · 582 阅读 · 0 评论