随笔分类 - Java进阶训练营
进阶p7训练营
摘要:一、从Spring到SpringBoot 随着Spring的生态体系越来越壮大,Spring也变得越来越复杂,越来越臃肿。比如你想基于一套SSM的框架进行开发,那么你需要配置很多的东西,整合很多的东西。 因此Spring Boot应运而生。那么他基于什么变得简单呢? 就是:约定大于配置 什么是Spr
阅读全文
摘要:一、Rabbitmq 二、RocketMQ 与kafka的区别: 纯java开发,不用zk 支持延迟投递,消息溯源等 多个队列使用一个日志文件,所以不存在kafka过多topic之后慢的问题 三、Pulsar Pulsar 是一个用于服务器到服务器的消息系统,具有多租户、高性能等优势。 Pulsar
阅读全文
摘要:一、 Lock 锁 java.util.concurrent.locks.Lock 为什么有了synchronized,还需要Lock呢? 使用方式更灵活 性能开销小 1.1 ReentrantLock 简单示例: public class TestLock { private Lock lock=
阅读全文
摘要:秒杀的本质 业务上:一场促销营销的活动 技术上:一种主动的DDos攻击,具备技术的不确定性和复杂度。 技术上对于秒杀有哪些优化方法呢? 丢弃订单 最早期,量太大扛不住,直接前端随机reject一些请求,返回抢单失败。简单有效 2. 优化吞吐 活动前期,提前准备一大批机器,服务化、分库分表搞定后端性能
阅读全文
摘要:写在前面 想想为什么要做重构? 如果没有能说出来的理由,建议不要轻易重构。 机票系统A的现状 A系统的背景 业务上:从杭州挪到北京,作为重新孵化项目,想要做大做强。行业竞争压力非常大,做不出成绩,项目就会被毙。 技术上:遗留的老系统,在一个其他系统基础上改出来的单体,换手了四次团队,找不到一个了解这
阅读全文
摘要:一、部署kafka集群 启动zookeeper服务: zkServer.sh start 修改配置文件config/server.properties #broker 的全局唯一编号,不能重复 broker.id=0 #删除 topic 功能使能 delete.topic.enable=true #
阅读全文
摘要:Kafka的概念和入门 Kafka是一个消息系统。由LinkedIn于2011年设计开发。 Kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下: 以时间复杂度O(1)的方式提供消息持久化能力,即使对TB级以上数据页能保证常数时间复杂度的访问性能。 高吞吐率。即使在非常廉价的商用机器
阅读全文
摘要:一、系统间通信方式 我们可以想到的方式: 基于文件 基于共享内存 基于IPC 基于Socket 基于数据库 基于RPC 各个模式的缺点: 文件:使用不方便,不及时 Socket:使用麻烦,多数情况下不如RPC 数据库:不实时,但是经常有人拿数据库模拟消息队列 RPC:会导致调用关系复杂,同步处理,压
阅读全文
摘要:Redis Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库、缓存和消息代理。Redis提供数据结构,如strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs, geosp
阅读全文
摘要:一、从数据说起 我们再做缓存之前需要把数据先分好类 按变化频率: 静态数据:一般不变的,类似于字典表 准静态数据:变化频率很低,部门结构设置,全国行政区划数据 中间状态数据:一些计算的可复用中间数据,变量副本,配置中心的本地副本 按使用频率: 热数据:使用频率高的 读写比大的:读的频率远大于写的频率
阅读全文
摘要:一、微服务发展历程 什么时候用微服务? 微服务应用在复杂度低的情况下,生产力反而比单体架构低 在复杂度高的地方,情况恰恰相反。 中台建设 二、微服务架构的最佳实践 1. 旧系统改造 功能剥离、数据解耦 自然演进、逐步拆分 小步快跑、快速迭代 灰度发布、谨慎试错 提质量线、还技术债 2. 系统拆分 高
阅读全文
摘要:一、Dubbo介绍 Dubbo是一款高性能、轻量级的开源 Java 服务框架。 提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。 Dubbo的主要功能 RPC调用 支持多协议(序列化、传输) 服务注册
阅读全文
摘要:一、RPC基础 RPC是什么? RPC是远程过程调用(Remote Procedure Call)的缩写,简单的来说就是像调用本地方法一样调用远程方法。 RPC简化版原理: RPC实现原理: 大概由如下几部分组成: 1. 设计 本地应用程序与远程应用程序,需要共享什么信息? 可以共享:POJO实体类
阅读全文
摘要:分布式事务 为什么需要分布式事务 随着互联网的快速发展,业务越来越复杂,一个完整的业务往往需要调用多个子服务,涉及的数据也越来越多。传统的系统难以支撑,就出现了分布式系统,而分布式系统又带来了数据一致性的问题,从而产生了分布式事务。 什么叫分布式事务 分布式条件下,多个节点操作的整体事务一致性。 特
阅读全文
摘要:一、数据库拆分 1. 为什么要做数据库拆分 单机数据库存在的问题? 从容量、性能、可用性和运维成本上难以满足海量数据的场景。 性能方面,数据量超过一定阈值,B+树索引深度增加导致磁盘访问的IO次数增加,进而导致查询性能的下降。 容量方面,单机能存储的数据量有限 可用性方面,大量的查询落到单一的数据库
阅读全文
摘要:从单机到集群 随着数据量增加,读写并发的增加,系统可用性要求的提升,单机MySQL存在着一些问题: 容量有限,难以扩容 读写压力、QPS过大,特别是分析类需求会影响到业务事务 可用性不足,单点故障 主从复制 核心流程是: 主库将数据变更操作记录到Binlog日志文件中 从库读取主库中的Binlog日
阅读全文
摘要:专题一:主键ID生成 数据库自增 数据库多主模式 号段模式 UUID 时间戳+随机数 Redis里生成 雪花算法(SnowFlake) 滴滴出品(TinyID) 百度(Uidgenertor) 美团(Leaf) 数据库自增 基于数据库的auto_increment自增ID完全可以充当分布式ID。需要
阅读全文
摘要:MySQL事务 事务可靠性模型ACID: Atomicity: 原子性,一次事务中的操作要么成功,要么失败 Consistency: 一致性,跨表,跨行,跨事务,数据库始终保持一致状态 Isolation: 隔离性,保护事务不会互相干扰,包含4种隔离级别 Durability: 持久性,事务提交后,
阅读全文
摘要:性能优化-数据库篇1 首先我们要谈论什么是性能? 吞吐和延迟 没有量化就没有改进 :监控和度量指标可以指导我们从哪里入手 80/20原则:先优化性能瓶颈的地方 过早的优化是万恶之源:选择合适的优化时机 脱离场景谈性能都是耍流氓:对性能的要求要符合实际 一般来说,DB/SQL操作的消耗在一次处理中占比
阅读全文
摘要:一、Lambda表达式 Lambda表达式是一个匿名函数,即没有函数名的函数。从动态引用到动态定义,可以简化写法。 对比两种写法: Lambda表达式的语法如下: (parameters) -> expression 或 (parameters) ->{ statements; } 还有如下特性:
阅读全文