使用HashMap的时候小心点

Map家族介绍 我们都知道HashMap是线程不安全的,但是HashMap的使用频率在所有Map中确实属于比较高的。因为它可以满足我们大多数的场景了。 看一眼Map家族的关系图: Map是一个接口,我们常用的实现类有HashMap、LinkedHashMap、TreeMap,HashTable。 HashMap HashMap根据key的·值来保存value,需要注意的是,HashMap不保证遍历的顺序和插入的顺序是一致的。HashMap允许有一条记录的key为null,但是对值是否为null不做要求。 HashTable HashTable类是线程安全的,它使用synchronize来做线程安全,全局只有一把锁,在线程竞争比较激烈的情况下hashtable的效率是比较低下的。因为当一个线程访问hashtable的同步方法时,其他线程再次尝试访问的时候,会进入阻塞或者轮询状态,比如当线程1使用put进行元素添加的时候, »

使用SimpleDateFormat的时候小心点

SimpleDateFormat是Java提供的一个格式化和解析日期的工具类,日常开发中应该经常会用到,但是由于它是线程不安全的,多线程公用一个SimpleDateFormat实例对日期进行解析或者格式化会导致程序出错。 代码示例演示 写一段小Demo来模拟多线程下SimpleDateFormat做时间格式化的时候报错,代码如下: package com.vernon.test.demo.jdk.text; import java.text.ParseException; import java.text.SimpleDateFormat; /** * Created with vernon-test * Description: »

平台迁移与整合那些事儿?

背景 迁移了一年,这话真的丝毫没有夸张~ 1、从2018年底开始从阿里的HSF迁移到SpringCloud,全面拥抱Spring开源框架; 2、然后就是项目组上海、北京、深圳的项目交接,全部由深圳这边来做业务; 3、后面就是全平台的迁移与整合,包括代码、中间件、数据库、网络等; 4、包括中途发布系统迁移了3~4次,网络从阿里云的经典网络迁移到阿里云的VPC网络; 做这一切都是为了(降本增效):提高我们的对接效率,节约我们的成本,对接的人员更加的专业与熟练。 »

Zipkin链路追踪HTTP与RabbitMQ方式

背景 上一篇只是单纯的从原理上以及控制台上去实践系统之间的打通,但是如果能从页面上去看每一个请求日志的链路情况就更好了。其实zipkin是提供了一个UI后台管理给到我们的。 注意点:关于 Zipkin 的服务端,在使用 Spring Boot 2.x 版本后,官方就不推荐自行定制编译了,反而是直接提供了编译好的 jar 包来给我们使用。具体请查阅:https://zipkin.io/pages/quickstart.html (最直接、 »

Spring Cloud Sleuth服务链路追踪

Zipkin服务追踪原理 创造一些追踪标识符(tracingId,spanId,parentId),最终将一个request的流程树构建出来,各业务系统在彼此调用时,将特定的跟踪消息传递至zipkin,zipkin在收集到跟踪信息后将其聚合处理、存储、展示等,用户可通过web UI方便获得网络延迟、调用链路、系统依赖等等。 transport作用:收集被trace的services的spans,并将它们转化为zipkin common Span,之后把这些Spans传递的存储层 collector会对一个到来的被trace的数据(span)进行验证、存储并设置索引(Cassandra/ »

KeepAlived保证Mysql主从自动切换

环境准备 前面有几篇文章对于MySQL主从搭建做了一些铺垫: 文章一:MySQL中Binlog的常用设置 文章二:MySQL主从同步-原理&实践篇 先启动Master与Slave的2台mysql服务器,具体信息如下: ➜ ~ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8f31266d08fc docker-mysql-master:v1 "/usr/sbin/ »

MySQL主从同步-原理&实践篇

什么是mysql的主从复制? MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。 Mysql复制原理 原理: (1)Master服务器将数据的改变记录二进制Binlog日志,当Master上的数据发生改变时,则将其改变写入二进制日志中; (2)Slave服务器会在一定时间间隔内对Master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求Master二进制事件 (3)同时主节点为每个I/O线程启动一个Dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志, »

MySQL Binlog设置

获取mysql镜像 ➜ ~ docker pull mysql ➜ ~ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest d435eee2caa5 3 weeks ago 456MB 启动mysql ➜ ~ docker run -itd --name docker-mysql-master -v »

MySQL锁

MySQL锁分类 每次在听别人说锁的时候,是不是会有点儿晕?(一会儿排它锁,一会儿GAP锁...)因为你站在不同的角度来说,它的名字就会不同。根据我们DB的引擎、隔离级别不同,导致的锁的情况也会不同。 下面根据几种不同的类型对锁做一个划分: 力度划分: 表级锁:表级锁是MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持。最常使用的MYISAM与INNODB都支持表级锁定,开销小,加锁快,粒度大,锁冲突概率大,并发度低,适用于读多写少的情况。 页级锁: »

Kubernetes启动一个Pod

获取镜像 在实际的投产中,公司一般所有企业的私有镜像:我们公司选择的是:https://goharbor.io/。 首先获取一个nginx的镜像,待会儿需要直接启动这个镜像 docker pull nginx 确认镜像已经在列表中: [root@CentOS7-Node1 parallels]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest »