
分布式与高并发
分布式、高并发、多线程一直都是高级资深工程师的必备技能。也是目前企业中主要的核心技术点。
分布式更多的一个概念,是为了解决单个物理服务器容量和性能瓶颈问题而采用的优化手段。相对于分布式来讲,高并发在解决的问题上会集中一些,其反应的是同时有多少量。高并发可以通过分布式技术去解决,将并发流量分到不同的物
Coder_Boy_
主攻【Java 微服务 云原生】,涉猎 web前端 、大数据 Linux运维 、嵌入式。
目前主要从事K8S DevOps CICD 容器云平台的开发设计工作,擅长使用DDD理念设计代码架构。
在团队开发中乐于分享自己的心得与经验,常于同事讨论业务与技术问题,担任项目组长一职。
并时刻关注并学习新技术,并将所学应用于研发中,对于已经处理解决的问题,事后从源码层研究报错原因。时刻保持技术敏感度
展开
-
分布式高并发设计案例 之秒杀系统设计
秒杀系统设计 【第一版设计】 1、前端页层面:防重复提交控制 1)页面秒杀按钮置灰 2)页面防重复提交 2、应用层面 1)令牌机制,通过Redis分配令牌,只有拿到令牌的用户才可去访问数据库 2)同一个用户需设置时间间隔,过时间间隔才可再次提交 3、DB层面 1)防止超卖:数据库乐观锁 【第二版设计】 0、【过滤合法请求】对请求参数做安全校验和接口签名验证 1、【请求分发过滤】请求后端接口前->引入Nginx做负载均衡,分..原创 2020-12-23 00:04:42 · 3101 阅读 · 7 评论 -
Java必备技能之实战篇—Nginx各种应用场景配置(可以直接复制修改使用)
nginx正向代理server { listen 8090; location / { resolver 218.85.157.99 218.85.152.99; resolver_timeout 30s; proxy_pass http://$host$request_uri; } access_log /data/httplogs/proxy-$host-aceess.log; }测试:http://www.ttlsa.com:8090resolver原创 2020-12-22 01:05:38 · 587 阅读 · 0 评论 -
数据库系列——使用Canal Admin实现MySQL增量数据同步运维管理
基于上一篇文章:https://blog.youkuaiyun.com/Coder_Boy_/article/details/111055381这里主要基于Canal Admin搭建一个MySQL增量数据管理运维web平台简介Canal Admin是为canal提供整体配置管理、节点运维等面向运维的功能,提供相对友好的WebUI操作界面,方便更多用户快速和安全的操作实际安装使用中会遇到一些坑,所以作为踩坑笔记,介绍本地安装使用情况。canal-admin需依赖canal,且canal版本..原创 2020-12-12 22:41:03 · 1143 阅读 · 0 评论 -
数据库系列——基于Canal实现MySQL增量数据同步
环境准备:1、redis (默认端口6379)2、zookeeper (默认端口2181)3、Kafka (默认端口9092)4、Canal (默认端口 11111)5、MySQL (默认端口 3306实际项目我们是配置MQ模式,配合RocketMQ或者Kafka,canal会把数据发送到MQ的topic中,然后通过消息队列的消费者进行消费处理。这篇文章演示部署Canal,配合使用Kafka,同步数据到Redis通过架构图,我们很清晰就知道要用到的组件:MySQL、C原创 2020-12-12 02:34:07 · 4307 阅读 · 6 评论 -
数据库系列——基于MySQL主从同步实现读写分离
前提:搭建一主多从数据库集群参考上一篇文章https://blog.youkuaiyun.com/Coder_Boy_/article/details/110950347本文Github代码地址:https://github.com/cheriduk/spring-boot-integration-template本文核心:代码层面进行读写分离代码环境是springboot+mybatis+druib连接池。想要读写分离就需要配置多个数据源,在进行写操作是选择写的数据源,读操作时选择读的数据源...原创 2020-12-11 15:54:49 · 445 阅读 · 0 评论 -
数据库系列——MySQL主从复制配置
1、背景一个项目中数据库最基础同时也是最主流的是单机数据库,读写都在一个库中。当用户逐渐增多,单机数据库无法满足性能要求时,就会进行读写分离改造(适用于读多写少),写操作一个库,读操作多个库,通常会做一个数据库集群,开启主从备份,一主多从,以提高读取性能。当用户更多读写分离也无法满足时,就需要分布式数据库了(可能以后会学习怎么弄)。正常情况下读写分离的实现,首先要做一个一主多从的数据库集群,同时还需要进行数据同步。这一篇记录如何用mysql搭建一个一主多次的配置,下一篇记录代码层面如何实现读写分离。原创 2020-12-10 12:30:49 · 2440 阅读 · 4 评论 -
数据库系列——Mysql主从复制作用和工作原理详解
简述主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库事务处理库,从库做查询库。一、什么是主从复制主从复制,是用来建立一个和主数据库完全一样的数据库环境,称为从数据库,主数据库一般是准实时的业务数据库。在最常用的mysql数据库中,支持单项、异步赋值。在赋值过程中,一个服务器充当主服务器,而另外一台服务器充当从服务器;此时主服务器会将更新信息写入到一个特定的二进制文件中。并会维护文件的一个索引用来跟踪日志循环。这个日志可以记录并发送到..原创 2020-12-09 19:17:10 · 1809 阅读 · 0 评论 -
数据库系列—MySQL 的二进制日志恢复数据库数据
1、开启 binlog 功能及基本操作要使用 MySQL 的 binlog 日志功能,首先要在 MySQL 的配置文件中开启该功能,操作很简单。找到 MySQL 的配置文件,在文件中添加一行 log_bin = mysql-bin 即可。其实在我安装的各种 MySQL 环境中,该功能通常都是默认开启的。开启 binlog 功能后,在 MySQL 的数据库目录下就会有诸如 mysql-bin.000001、mysql-bin.000002等文件,这就是 MySQL 的二进制日志文件。每当 MySQL原创 2020-12-08 16:12:09 · 1974 阅读 · 1 评论 -
任务调度处理系列之 Spring源码分析-【SchedulingConfigurer实现原理】
可能的场景在做业务平台的时候我们经常会遇到,某些跟时间打交道的需要修改状态,比如说在时间区间之前,属于未生效状态,区间之内属于有效期,区间之后,属于过期,或者需要每天 每周 每月,甚至是年为单位的做一些固定的操作。通过定时任务可以通过开启定时任务来完成这些需求。我做合同管理模块,合同有未生效,已生效,已过期,三个状态,不可能每次用户登录的时候去判断这个状态,然后修改,这样做会在登录的逻辑里边耦合了合同业务逻辑,同时消耗了登录时间,不太可取。还有一些需要报表统计类的批量处理任务,任务量大,类别也.原创 2020-12-05 04:27:19 · 3276 阅读 · 0 评论 -
Redis数据类型的应用场景-基本使用
先说明一下一些名词:名词解释:原创 2020-12-04 18:30:36 · 255 阅读 · 0 评论 -
Redis数据类型介绍——官网解读
官网地址:https://redis.io/topics/data-types-introRedis常用数据类型介绍An introduction to Redis data types and abstractionsRedis 数据类型和抽象的介绍Redis is not aplainkey-value store, it is actually adata structures server, supporting different kinds of values. Wha...翻译 2020-12-04 17:39:15 · 960 阅读 · 0 评论 -
Java必备技能之源码篇(Nginx源码研究之nginx限流模块)
概述:高并发系统有三把利器:缓存、降级和限流;限流的目的是通过对并发访问/请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务(定向到错误页)、排队等待(秒杀)、降级(返回兜底数据或默认数据);高并发系统常见的限流有:限制总并发数(数据库连接池)、限制瞬时并发数(如nginx的limit_conn模块,用来限制瞬时并发连接数)、限制时间窗口内的平均速率(nginx的limit_req模块,用来限制每秒的平均速率);另外还可以根据网络连接数、网络流量、CPU或内存负载等来限流。业界主原创 2020-12-02 14:39:14 · 513 阅读 · 0 评论 -
Java常用中间件之 NGINX实现限流功能的官方文档说明
官方文档:http://nginx.org/en/docs/http/ngx_http_limit_req_module.htmlModule ngx_http_limit_req_module Example Configuration 示例配置 指令 Directives limit_req limit_req_dry_run limit_req_log_level limit_req_stat...翻译 2020-12-02 02:59:04 · 441 阅读 · 0 评论 -
Java必备技能之实战篇 (使用nginx实现分布式限流)
使用场景:一般对外暴露的系统,在促销或者黑客攻击时会涌来大量的请求,为了保护系统不被瞬间到来的高并发流量给打垮, 就需要限流.1.简介一般对外暴露的系统,在促销或者黑客攻击时会涌来大量的请求,为了保护系统不被瞬间到来的高并发流量给打垮, 就需要限流本文主要阐述如何用nginx 来实现限流. Hystrix 也是可以的。2.编码-首先部署一个对外暴露接口的程序我这里部署的是一个spring boot 项目 里面暴露了如下接口, 很简单暴露了一个 get...原创 2020-12-02 00:03:54 · 473 阅读 · 0 评论 -
Java必备技能之环境搭建篇 (linux ab压力测试Nginx)(实战)
1测试普通限流1)配置nginx限流速率为1qps,针对客户端IP地址限流(返回状态码默认为503),如下:http{ limit_req_zone $binary_remote_addr zone=test:10m rate=1r/s; server { listen 80; server_name localhost; location / { limit_req zone=test; root html; index index.html index.原创 2020-12-01 13:11:48 · 423 阅读 · 0 评论 -
Java必备技能之环境搭建篇 (linux ab压力测试)
linux ab压力测试1、安装yum -y install httpd-tools2、检测版本ab -V3、常用 ab压测 Nginx默认页做为演示:[root@localhost usr]# ab -c 100 -n 10000 http://127.0.0.1/index.html#同时处理1000个请求并运行10次index.html#-c100表示并发用户数为100#-n10000表示请求总数为10000 #简单使用说明 ./ab -c 10.原创 2020-12-01 11:12:00 · 553 阅读 · 0 评论 -
Java必备技能之环境搭建篇 (Nginx 限流访问模块的方法)
Nginx 的 limit 模块用于限制 Nginx 的访问。limit 模块包含有两个部分:limit_conn 用于对连接数量的限制 limit_req 用于对请求频率的限制limit_connlimit_conn 模块的实现比 limit_req 简单,直接对拥有相同变量值的连接进行计数,超过限制的连接返回 503 错误(Service Temporarily Unavailable)。实际上,由于某一时刻,一个连接上一般只有一个待处理请求,且由于 keepalive 和 p原创 2020-11-30 23:27:22 · 200 阅读 · 0 评论 -
Java必备技能之环境搭建篇之Nginx限流(简单实现)
Nginx现在已经是最火的负载均衡、反向代理中间件,高并发场景必用中间件,应用场景很多,这里介绍它的限流实现方案。场景接入:在流量陡增的互联网面前,接口限流也是很有必要的,尤其是针对高并发的场景。Nginx的限流主要是两种方式:限制访问频率和限制并发连接数。限流(rate limiting)是NGINX众多特性中最有用的,也是经常容易被误解和错误配置的特性之一。该特性可以限制某个用户在一个给定时间段内能够产生的HTTP请求数。请求可以简单到就是一个对于主页的GET请求或者一个登陆表格的POS..原创 2020-11-30 23:02:01 · 306 阅读 · 0 评论 -
云原生环境搭建—Docker创建镜像 并推拉Harbor
创建镜像镜像与容器关联一、根据Dockerfile创建镜像1、mkdir dockerfile/lib/centos7base/创建目录2、创建Dockerfilevim Dockerfile3、构建镜像docker build -tdkcentos7 .--tag, -t:镜像的名字及标签过程解析我们看一下docker的编译过程编译的第一步(绿色边框)会复用之前已经存在的centos:7重点是第二步b48566f8cf2c其...原创 2020-11-29 20:38:57 · 516 阅读 · 0 评论 -
云原生环境搭建—Harbor安装
Harbor安装Docker 安装安装一些必要的系统工具:sudo yum install -y yum-utils device-mapper-persistent-data lvm2添加软件源信息:sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo更新 yum 缓存:sudo yum makecache fast安装 Docke原创 2020-11-29 14:31:03 · 879 阅读 · 0 评论 -
源码环境搭建-Tomcat 8 源码导入到IDEA(Maven)
1. Tomcat源码地址http://tomcat.apache.org/download-80.cgi,本文使用的Tomcat版本是apache-tomcat-8.5.41-src。注意:本文的安装目录在E:\apache-tomcat-8.5.41-src,会多次用到,需要替换成自己的。2. 在apache-tomcat-8.5.41-src根目录下新建pom.xml文件,引入依赖的jar包,文件内容如下<?xml version="1.0" encoding="U..原创 2020-11-26 23:39:04 · 546 阅读 · 0 评论 -
MySQL核心原理与性能优化-InnoDB锁定和事务模型
说明:【引用块】内是官方文档,对应下面的【非引用块】部分为翻译。14.7InnoDB Locking and Transaction Model InnoDB锁定和事务模型14.7.1 InnoDB Locking14.7.2 InnoDB Transaction Model14.7.3 Locks Set by Different SQL Statements in InnoDB14.7.4 Phantom Rows14.7.5 Deadlocks in ...翻译 2020-11-26 00:07:22 · 332 阅读 · 0 评论 -
JVM优化指南 - 安装配置JVM可视化监控
Jdk自带一个JVM监控工具,但还需要配合其他插件才能更好的监控JVM。安装VisualGC 插件便于后面JVM调优效果查看基础环境搭建好了,后面才能用这个工具检查JVM内存使用状况。原创 2020-11-24 16:42:18 · 247 阅读 · 0 评论 -
JVM优化指南 - 在idea中配置拓展反编译工具
配置步骤如下图:工具配置好后,下面需要学会如何阅读字节码指令。字节码指令需要查询Oracle官网进行简单学习,可以加深对JVM执行原理的理解。原创 2020-11-24 13:00:47 · 232 阅读 · 0 评论 -
Dubbo源码分析- 总体介绍与模块划分
dubbo框架设计介绍简介Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和Spring框架无缝集成。它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。相信国内用dubbo的互联网公司还是很多的,springcloud虽然是挂靠在鼎鼎大名的spring团队Pivotal下,但是感觉国内使用的公司没有使用dubbo的多,而且现在dubbo重新启动维护,加上捐给了apache基金会,以后的发..原创 2020-11-23 21:50:29 · 380 阅读 · 0 评论 -
Zookeeper核心之 实现细节【Leader的请求处理流程】
上一篇写了https://blog.youkuaiyun.com/Coder_Boy_/article/details/109971650 Follower节点处理用户的读写请求这一篇接着解读leader节点处理用户的读写请求对应时序图:原创 2020-11-23 09:47:21 · 450 阅读 · 1 评论 -
Zookeeper核心之 实现细节【Follower的请求处理流程】
Follower节点处理用户的读写请求代码跟踪一下:‘定位到Follower请求处理核心代码后,通过这个方法画出如下执行细节。原创 2020-11-23 00:40:17 · 826 阅读 · 1 评论 -
Zookeeper核心之 执行主逻辑源码核心ZooKeeperServerMain#main()
核心执行逻辑:执行时序图:原创 2020-11-22 02:32:51 · 402 阅读 · 0 评论 -
Zookeeper核心之 watcher监听机制源码核心ZooKeeperServer#processTxn()
原创 2020-11-22 02:01:55 · 207 阅读 · 0 评论 -
Zookeeper核心之 leader选举源码核心FastLeaderElection#lookForLeader()
原创 2020-11-21 22:52:30 · 236 阅读 · 0 评论 -
【分布式与高并发、多线程】的之概念区别
什么是分布式?分布式更多的一个概念,是为了解决单个物理服务器容量和性能瓶颈问题而采用的优化手段。该领域需要解决的问题极多,在不同的技术层面上,又包括:分布式文件系统、分布式缓存、分布式数据库、分布式计算等,一些名词如Hadoop、zookeeper、MQ等都跟分布式有关。从理念上讲,分布式的实现有两种形式:水平扩展:当一台机器扛不住流量时,就通过添加机器的方式,将流量平分到所有服务器上,所有机器都可以提供相当的服务;垂直拆分:前端有多种查询需求时,一台机器扛不住,可以将不同的需求分发到不同的机原创 2020-11-20 18:57:19 · 270 阅读 · 0 评论