随笔分类 - 系统架构
摘要:##Netty 原理 Netty 是一个高性能、异步事件驱动的 NIO 框架,基于 JAVA NIO 提供的 API 实现。它提供了对TCP、UDP 和文件传输的支持,作为一个异步 NIO 框架,Netty 的所有 IO 操作都是异步非阻塞的,通过 Future-Listener 机制,用户可以方便
阅读全文
摘要:前言 本文所写的,偏重于架构师的内容,所以阅读的小伙伴,要有综合的一些能力,否则,你可能会被其中的计算给弄晕,不过既然,阅读我的文章嘛,都是从基础开始写起,所以还是很好读的。 本文要讨论的话题是,当我搭建一个kafka集群的时候,我们需要考虑的问题。 不能张口就来,我需要什么什么配置的机器之类的,那
阅读全文
摘要:业务场景 公司有个借贷的项目,具体业务类似于阿里的蚂蚁借呗,用户在平台上借款,然后规定一个到期时间,在该时间内用户需将借款还清并收取一定的手续费,如果规定时间逾期未还上,则会产生滞纳金。 用户发起借款因此会产生一笔借款订单,用户可通过支付宝或在系统中绑定银行卡到期自动扣款等方式进行还款。还款流程都走
阅读全文
摘要:##什么是零拷贝? ###从一个案例说起 为了解释这个概念,我们先要从一个需求说起,说某天某领导给你下发了一个任务,完成一个从文件中读取数据,并传输到网络上的一个小程序。代码很简单: 首先我们在我们的操作系统中找到这个文件,然后把数据先读到缓冲区,最后把缓冲区的数据发送到网络上。 代码是很简单,现在
阅读全文
摘要:LDAP概念和原理介绍 相信对于许多的朋友来说,可能听说过LDAP,但是实际中对LDAP的了解和具体的原理可能还比较模糊,今天就从“什么是LDAP”、“LDAP的主要产品”、“LDAP的基本模型”、“LDAP的使用案例”四个方面来做一个介绍。 我们在开始介绍之前先来看几个问题: 1. 我们日常的办公
阅读全文
摘要:HSDB:HotSpot Debugger Jvm自带工具,用于查看JVM运行时的状态 1、断点 断点查看代理类名,或者打印输出 2、查看进程ID jps命令查看当前程序的进程ID值 3、启动HSDB 如果HSDB启动报错:UnsatisfiedLinkError sawindbg.dll 再jdk
阅读全文
摘要:什么是脑裂 脑裂(split\ brain)就是“大脑分裂”,也就是本来一个“大脑”被拆分了两个或多个“大脑”,我们都知道,如果一个人有多个大脑,并且相互独立的话,那么会导致人体“手舞足蹈”,“不听使唤”。 脑裂通常会出现在集群环境中,比如ElasticSearch、Zookeeper集群,而这些集
阅读全文
摘要:前言 " " 物流行业中,通常会涉及到EDI报文(XML格式文件)传输和回执接收,每发送一份EDI报文,后续都会收到与之关联的回执(标识该数据在第三方系统中的流转状态)。这里枚举几种回执类型: ,系统在收到不同的回执报文后,会执行对应的业务逻辑处理。当然,实际业务场景并没有那么笼统,这里以 回执处理
阅读全文
摘要:1.1 基本概念以及线程与进程之间的区别联系 关于进程和线程,首先从定义上理解就有所不同: 进程是具有一定独立功能的程序、它是系统进行资源分配和调度的一个独立单位,重点在系统调度和单独的单位,也就是说进程是可以独 立运行的一段程序。 线程是进程的一个实体,是CPU调度和分派的基本单位,他是比进程更小
阅读全文
摘要:一、需求 Web-Server通常有个配置,最大工作线程数,后端服务一般也有个配置,工作线程池的线程数量,这个线程数的配置不同的业务架构师有不同的经验值,有些业务设置为CPU核数的2倍,有些业务设置为CPU核数的8倍,有些业务设置为CPU核数的32倍。“工作线程数”的设置依据是什么,到底设置为多少能
阅读全文
摘要:1. 前言 抽奖是一个典型的高并发场景应用,平时流量不多,但遇到大促活动,流量就会暴增,今年的周年庆期间的日均 UV 就超过百万。在过去的一年里,负责过这个项目的多次重构工作,期间各种踩坑无数,就以此文当做总结,来聊聊我们是如何架构这个高并发系统吧。 2. 整体设计详解 在我看来,能提高服务器应对并
阅读全文
摘要:背景 缓存的主要作用是暂时在内存中保存业务系统的数据处理结果,并且等待下次访问使用。在日长开发有很多场合,有一些数据量不是很大,不会经常改动,并且访问非常频繁。但是由于受限于硬盘IO的性能或者远程网络等原因获取可能非常的费时。会导致我们的程序非常缓慢,这在某些业务上是不能忍的!而缓存正是解决这类问题
阅读全文
摘要:Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。Dr
阅读全文
摘要:1、Jenkins入门(一)安装Jenkins 2、Jenkins入门(二)部署java项目 3、Jenkins远程部署SpringBoot应用 4、配置sonar、jenkins进行持续审查 5、SonarLint插件
阅读全文
摘要:互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous integration,简称CI)。 本文简要介绍持续集成的概念和做法。 一、概念 持续集成指的是,频繁地(一天多次)将代码集成到主干。 它的好处主要有两个。 (1)快速发现错误。每完成一点更新,就集
阅读全文
摘要:上面已提到消费端感知topic服务器有新消息叫推拉模式 左图采用短连接,server端不能获取clinet连接资源,无法主动推给client。所以要求client定时过来拿数据 右图采用长连接,server端可以获取clinet连接资源,有消息过来就能主动推给client 短连接应用受环境因素限制,
阅读全文
摘要:开发过程中四个环境分别是:pro、pre、test、dev环境,中文名字:生产环境、灰度环境、测试环境、开发环境 环境介绍: pro环境:生产环境,面向外部用户的环境,连接上互联网即可访问的正式环境。 pre环境:灰度环境,外部用户可以访问,但是服务器配置相对低,其它和生产一样。 test环境:测试
阅读全文
摘要:使用场景: 当这台机器出现故障时,自动动态切换到另一台热备的机器 高可用性HA(High Availability) 指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。HA系统是目前企业防止核心计算机系统因故障停机的最有效手段。 实现HA的
阅读全文
摘要:Flyway 和 Liquibase 都是 Java 项目中常用的 DB migration 工具, 从使用简便性看,Flyway 比 Liquibase 更简单, 从 github 的 star 数量看, flyway 更受欢迎. flyway 命令行工具和 maven 插件 对于 SpringB
阅读全文
摘要:一、缓存穿透预防及优化 缓存穿透是指查询一个根本不存在的数据,缓存层和存储层都不会命中,但是出于容错的考虑,如果从存储层查不到数据则不写入缓存层,如图 11-3 所示整个过程分为如下 3 步: 缓存穿透将导致不存在的数据每次请求都要到存储层去查询,失去了缓存保护后端存储的意义。 图-1:缓存穿透模型
阅读全文