
框架
文章平均质量分 66
zhurhyme
比较斋
展开
-
如何学习mysql数据库-mysql学习总结
最近在学习mysql数据库,对于不明白的问题翻阅了不少的博客,在此总结一下。mysql数据库学习首推的当然是 mysql reference关于mysq 的协议,当然是 mysql inner reference但是这两个参考文档都太长,很少有人能够将其看完,我也是将其作为参考。如果想了解mysql 的复制原理,可以参考一下canal 的源代码,canal源码分析。看canal 源码时结合mysql inner reference 文档,能够很快明白其基本原理。对于mysql 的redo log原创 2020-10-28 22:41:26 · 401 阅读 · 0 评论 -
feignclient的实现原理(二)-code demo
在前一篇文档中简单的描述了feignclient的实现原理,这一篇我们就将其核心原理用简单代码描述一下。这里使用的java知识就是代理。在这篇文档中,我只是将如何构建代理的那一部分简单实现一下,为的是能够更好的理解其本质,因为spring cloud 框架帮我封装的太深以致于无法了解其本质。下面就以一个例子来简要描述一下。接口定义package com.test;public interface HelloService { String sayHello(String name);}为了在原创 2020-10-26 21:44:12 · 818 阅读 · 0 评论 -
spring.application.name改名引发的bug
spring.application.name改名引发的bug背景因为系统进行技术组件迁移,需要占用spring.application.name 这个配置名称。而原系统所使用技术栈为spring cloud,注册中心为eureka,业务系统所提供的服务名称在注册中心的名字所使注册的名字即为spring.application.name所配置的内容,下游业务所使用的feignclient通过服务名进行调用服务要么一起该,要么服务端要做到平滑升级。作为技术人员,当然是选择平滑升级了。如何做到平滑升级呢?原创 2020-10-11 11:35:00 · 23071 阅读 · 0 评论 -
hashmap与分库分表技术
HashMap在java的数据结构类库中提供了java.util.HashMap数据结构。它的数据存储结构为数组+单向链表。HashMap的初始容量为16即数组的长度。对于HashMap中的数组,我们可以将每个数组位置看作一个桶。每个桶即为实际数据的存储容器。HashMap使用单向链表来实现这个桶容器。HashMap的存储值步骤(put):当有数据需要存储在HashMap中时,则首先应用has原创 2017-09-02 10:38:39 · 769 阅读 · 0 评论 -
CMS 垃圾回收算法总结
并发标记清除(CMS)垃圾回收算法垃圾回收的四个主要阶段初始标记 初识标记:这个过程是标记从gc root出发发的直接相关的引用。这个时间很短,但是是stop the world;并发标记 并发标记:用户线程并行执行,进行相关的引用标记。这个时间很长,一般决定于堆内存的大小。所使用的线程数为(cpu个数+3)/4,所以当cpu核数很少时,在并发标记阶段会出现严重的性能下降。为了解决这个问题,原创 2017-10-21 08:34:34 · 3762 阅读 · 0 评论 -
Redis 集群简介
Redis 集群帮我们解决了failover的问题,以及sharding的问题。简单来讲,redis集群通过复制,以及选主策略来解决failover的问题;redis通过重新分片的机制来解决数据sharding的问题。现在对于这两个问题,我们深入剖析一下。sharding 问题当我们在redis集群中新增加一台机器,并且将相关的槽分配给新增的机器。那么需要解决两个问题第一问题,客户端如何感知新增的节原创 2017-10-25 16:07:16 · 463 阅读 · 0 评论 -
可扩展的后台管理系统框架
需求对于公司内部业务系统,最基本的功能就是部门管理、用户管理、角色管理、权限管理、登陆功能。但是公司内部系统一般情况下,不止是一个(如果是一个那就是巨无霸,就面临着被拆分,也会遇到我们后面要讨论的问题)。那么多个系统,面对上面的功能我们需要开发多套吗?这是个问题值得思考。需求分析与解决方案面对上述的需求,对于程序员来讲,只是一套代码到处复制而已,这样就可以搞定问题。如果在上面的需求再增加一点,即是希原创 2017-12-15 23:19:42 · 4191 阅读 · 0 评论 -
2017已过,2018已来
近一段时间,一直在写业务代码,没有对于框架进行太多的深入研究。所以在此也不会有什么干货输出。之所以写这篇文章,主要的目的就是将2017年的过去的日子作一个总结,对于2018作一个规划。2017年,对于我的生活是丰富多彩的,主要有几件大事发生:原创 2018-01-02 22:06:37 · 589 阅读 · 1 评论 -
redis+lua与秒杀--lua入门
这两天同事们去国外旅游了,我这个宅货不喜欢出门就没去。但没有想到的是我还要按时来上班,在公司闲来无事,了解点关于lua的内容,现简单作个笔记。redis是什么,自不必多言。lua脚本语言,胶水语言。redis在 2.6版本开始就支持lua。在安装了redis服务器之后,就可以执行lua。那么redis为什么需要lua呢?简单来说为了性能以及事务的原子性。因为redis帮我们提供的事务功能太差。下面以原创 2018-01-12 17:52:50 · 17119 阅读 · 3 评论 -
数据并发问题-精通spring 企业应用开发实战读书笔记
数据并发问题原创 2018-01-09 22:17:12 · 370 阅读 · 0 评论 -
大数据下数据频次计算问题与排序问题
在1000w数据中取出前10个出现次数最多的这个问题的一般叙述即在大数据集中取出前K个出现次数最多的。原创 2018-01-09 22:20:25 · 2502 阅读 · 0 评论 -
重新认识jdk8的lambda表达式
为什么jdk8引入lambda?对于这这个问题,我相信学习过jdk8新特性的朋友会给出我一大堆的答案,但是我想问的是你真的理解你所说的答案吗?对于官方给的lambda一大堆好处,我是真的没有搞太懂。现在我只从我的视角来理解一下什么lambda,以及为什么引入这个玩意。 List<User> userList=... Collections.sort(userLi...原创 2018-07-16 15:11:51 · 1199 阅读 · 1 评论 -
dubbo rest服务启动过程分析
dubbo rest服务启动过程dubbo作为rest服务,部署在tomcat容器启动过程分析。web.xml 配置<listener> <listener-class>com.alibaba.dubbo.remoting.http.servlet.BootstrapListener</listener-class></liste...原创 2018-07-17 14:55:53 · 2855 阅读 · 0 评论 -
内部服务路由实现的方案探讨
问题对于一个业务接口服务它可以有多个实现类。对于使用者来说,需要指定它所使用的是哪一个实现。比如一个接口:接口定义interface DemoService{ void printStr(String str);}@Service("printerService")class PrinterServiceImpl implements DemoService{ ...原创 2018-07-25 13:24:25 · 650 阅读 · 0 评论 -
mysql8.0.16 group replication(组复制)
关于mysql组复制从5.7.17就有了。本文主要是记录一下操作步骤,以及相应的坑点。mysql 单主模式的组复制配置三台机器 10.50.31.7,10.50.31.8,10.50.31.1831.7上配置my.cnf配置server_id=1log-bin=mysql-binlog-bin-index=mysql-bin.indexrelay-log=relay-log#ex...原创 2019-05-22 23:35:08 · 1509 阅读 · 0 评论 -
电商订单技术方案梳理-续
原来简单的整理一下订单业务,但是下面的评论网友望我参看 http://jblog.top/article/details/255453看了之后我又突发感想,再作一篇续。作续的目的,是将之前没有理清楚的再理一理。对于高并发情况下的电商下订单,需要解决的技术难点,主要集中在如下几个方面: 1.如何扣减库存; 2.如何写入订单; 3.如何完成支付,这个太复杂,不展开了下面我原创 2017-09-15 16:00:54 · 1975 阅读 · 0 评论 -
电商订单技术方案梳理
对于电商系统来说,下订单的服务是相当重要的。下订单服务的好与坏甚至影响到用户的体验,以及后续是否再次购买等行为。近期对于我们系统的下订单业务进行梳理,总结如下。一般的下单流程 1. 用户挑选相应的商品放入购物车; 2. 点击购买,进入订单详情页(这一页也可以通过购物车页,点选商品之后进入); 3. 点击下单,生成相应的订单; 4. 点击支付进入支付环节;我们主要分析第3步:前端请求提交了相应原创 2017-09-14 21:59:09 · 4962 阅读 · 1 评论 -
配置metaq扩展log4j发送消息的坑
为什么要配置log4j发送消息呢?主要是将现在系统的日志都集中管理,而不是分散在各个系统中,对于分布式系统更是如此。但是始终测试不成功现在回想一下不成功,主要的原因就是对于每个组件不熟悉不理解其原理。坑1:zookeeper没有配置myid下载的zookeeper 压缩包,在win7下解压了之后,不作任何配置好像就能启动,启动metaq也可以连上,但是客户端通过zookeepe原创 2016-01-30 17:23:05 · 1074 阅读 · 0 评论 -
java web用户请求过程原理的另类剖析
浏览器发出请求,因为浏览器应用http网络协议,所以发出了满足http协议的请求,则必须有一个实现了http协议的服务器来接收;在服务端,为了接收一个http协议请求,则服务器应具有如下功能:a.实现http协议。则浏览器的发出的http请求,被服务器接收了;服务器将http请求进行解析,获取了相应的参数;b.然后根据参数从服务器中获取相应的内容返回浏览器。由于原创 2015-10-18 08:28:21 · 1445 阅读 · 0 评论 -
关于json的理解
关于json的理解可能是写java时间太长了,满脑子都是面向对象。所以的有东西都是对象。对于json一直都没有太感冒,只是把它当作一种数据格式,类似与xml.前段时间在思考一个问题,android与ios开发在调用后台服务,如何才能像java rpc服务调用一样方便。这个问题一直没有答案(我主要是开发后台国架构,对于手机开发是不太清楚)。但是我知道,http+json 能够解决前后端的调用原创 2017-02-05 00:52:17 · 538 阅读 · 0 评论 -
zuul网关的设计思路的思考
最近一段时间一直在思考api网关该如何设计。前段时间也按照个人对于网关的理解写了个gateway,但是总感觉不尽如人意。周末坐高铁回家,带了一本spring cloud的微服务书(买来一直没有时间看)。重点看了zuul的章节,了解了它的设计思路,现总结如下。网关应有的功能参数校验鉴权限流服务路由负载均衡api服务列表的动态维护…这几个功能对于api来说都很必要,不作一一解释。重点说一原创 2017-07-03 16:07:15 · 3960 阅读 · 1 评论 -
网关方案总结
经过这一段时间的思考、实践、受挫、再思考、再实践,现将api网关的方案总结一下。总的目标主要为了解决SOA服务框架对外提供api相关问题,主要涉及如下几个方面:统一鉴权限流防攻击系统拆分api横向扩展、高可用、负载均横服务自动扩缩…为了解决上面的一系列问题,所以需要一个网关系统来作为外部服务调用的统一入口。本方案分两部分:第一部分具体代码请参见 https://github.com原创 2017-07-13 15:42:07 · 3378 阅读 · 0 评论 -
应用层数据库读写分离db-loadbalance
web应用中,最先遇到性能瓶颈的就是数据库了。对于解决这个性能问题,首选方案就是数据库的读写分离。这里不谈如何构建数据库的读写分离方案,想谈的是当我们有了数据库的读库与写库如何进行读写分离。如果数据库本身就提供读写分离,或者说数据库本身支持读写分离,那么对于用户来说那是再好不过了,比如oracle rac就可以。另外还有mysql replication 驱动,当然它需要与应用事务结合。在此想原创 2016-02-05 21:28:01 · 1664 阅读 · 0 评论 -
如何正确理解api网关
微服务这么火,随之api网关常常被提到。那么什么才是api网关?这个问题也一直困扰着我。前几周在csdn数据库大会上与沪江的一个架构师就这个问题探讨了一下。使我对于api网关的认识清晰了很多,所以在本文梳理一下我的思路并总结,希望能够帮助到还一直迷糊的朋友。使用api网关的原因在网上关于说明使用api网关的原因,无外乎如下几种:负载均衡减少客户端与服务端的直接调用容错服务发现与注册统一认证原创 2017-06-18 20:06:40 · 18590 阅读 · 3 评论 -
自动化部署系统设计
这里所说的自动化部署系统,其实是一种半自动的代码部署,不同于jenkins的持续集成,也不同于puppet,ansible的自动部署。根据公司实际情况,而定制的一种自动化部署方案:背景介绍公司项目发布过程如下:开发人员上传war包至svn目录,并发邮件告知运维其svn目录;运维人员从svn地址下载war包至本地;运维人员ssh2登陆远程服务器:备份服务war包停止服务上传新war至相应的目原创 2017-07-18 17:44:39 · 5078 阅读 · 2 评论 -
count distinct基数统计之一
最近开发一个业务功能遇到一个关于 count distinct的统计,现在这个统计功能是直接运行在mysql数据库中的。现在mysql执行时间在业务上还是可以容忍的范围内,也没有进行优化。但我感觉有必要将后续的优化方案先整理一下。随着业务数据量的增加,程序改进思路:mysql的 count distinct语法在数据量不算很大的情况下,对于count distinct统计,我们一般都是在数据库中执原创 2017-07-25 11:43:05 · 963 阅读 · 0 评论 -
追踪(trace)系统框架设计的思考
开发过稍微大一点的soa服务系统的程序员都听说过trace系统(但真正从零开始设计的人,我个人认为很少)。为什么需要trace呢?原创 2017-07-27 22:11:03 · 5967 阅读 · 0 评论 -
storm与流计算
在聊流计算之前,先聊一下儿时的一段记忆。儿时记忆记得小的时候,在老家建房子,需要用砖,有几个小工用小车一车一车的推砖送到所谓的大工面前供大工使用。从拉砖的起始地,到大工使用砖的目的地,这个过程都是小工一个人在拉砖,就是单线程的拉砖处理模式;从拉砖的起始地,到大工使用砖的目的地,这个过程都是多个小工在拉砖,就是多线程的拉砖处理模式;这些小工在拉砖的过程没有任何交集,只是共同拉那一堆砖,直到拉完为止原创 2017-07-28 00:53:54 · 410 阅读 · 0 评论 -
tomcat servlet3的异步化原理理解
之所以想起来扒这个servlet 3的异化步原理,原因是前几天写了一篇关于消息队列的pull与push模式理解.从对spring jms消息队列的客户端实现来看activemq服务端并没有真正的实现push.所以想搞清楚tomcat是如何实现servlet3的异步化。tomcat如何处理请求从客户端发出一次请求至tomcat容器大致经过如下过程:客户端发出http请求至tomcat的连接监听端口;原创 2017-07-28 10:12:49 · 5369 阅读 · 1 评论 -
应用层数据库读写分离--续
前一段时间给系统出关于数据库的读写分离,利用spring的切面功能与spring的数据源动态路由进行数据的切换,具体不详述,请参见应用层数据库读写分离db-loadbalance现在我想说的是,这个方案并不好。因为它的业务侵入性太强。当然在业务架构上,进行整改没有侵入性那是不可能的。但是我们可以作的更好一点,让业务侵入性更少一点。最近一段时间,一直在思考,如何能够更好的解决这个问题原创 2016-04-29 21:38:56 · 1270 阅读 · 0 评论