自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Aaron的blog

技术交流

  • 博客(41)
  • 收藏
  • 关注

转载 ElasticSearch亿级数据毫秒查询实现

面临问题:很多时候数据量大了,特别是有几亿条数据的时候,可能你会发现,跑个搜索怎么一下 5~10s。第一次搜索的时候,是 5~10s,后面反而就快了,可能就几百毫秒。说实话,ES 性能优化是不可能随手调一个参数,就可以万能的应对所有的性能慢的场景。也许有的场景是你换个参数,或者调整一下语法,就可以搞定,但是绝对不是所有场景都可以这样。性能优化:Filesystem Cache你往 ES...

2019-06-25 14:21:00 6173

转载 InnoDB缓冲池-buffer pool

InnoDB的缓冲池缓存什么?有什么用?缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘IO,起到加速访问的作用。速度快,那为啥不把所有数据都放到缓冲池里?凡事都具备两面性,抛开数据易失性不说,访问快速的反面是存储容量小:(1)缓存访问快,但容量小,数据库存储了200G数据,缓存容量可能只有64G;(2)内存访问快,但容量小,买一台笔记本磁盘有2T,内存可能只有1...

2019-06-24 13:46:27 286

转载 千万级并发的软件架构演进之路

基本概念分布式系统中的多个模块在不同服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部署在不同的服务器上,或两个相同功能的Tomcat分别部署在不同服务器上高可用系统中部分节点失效时,其他节点能够接替它继续提供服务,则可认为系统具有高可用性集群一个特定领域的软件部署在多台服务器上并作为一个整体提供一类服务,这个整体称为集群。如Zookeeper中的Master和Slave分...

2019-06-24 09:59:04 880

转载 IntelliJ IDEA 内存优化策略

Don’t be a Scrooge and give your IDE some more memory目标在一个接近日常开发项目的场景下(加载一个大项目、加载2、3个微服务、git pull 后刷新大项目),测试各个设置带来的效果,并选出内存消耗和速度都达到最优时的最佳设置。测试场景在 Idea 中关闭所有项目基于测试文件 idea.vmoptions 进行设置重启电脑启动后关...

2018-12-06 10:27:18 4569

原创 http之短链接原理分析

1. 什么是短链接顾名思义,短链接即是长度较短的网址。通过短链接技术,我们可以将长度较长的链接压缩成较短的链接。并通过跳转的方式,将用户请求由短链接重定向到长链接上去。短链接主要用在诸如微博,BBS等对帖子字数有限制的网站,通过使用短链接,用户可以把注意力放在帖子的内容上,而不是在担心链接超长的问题。这里以百度的 dwz.cn 短链接服务为例,我们使用百度搜索"hello world",链接为h...

2018-12-05 13:52:43 1589

转载 Java之多层链表:SkipList

SkipList介绍Skip List ,称之为跳表,SkipList有着不低于红黑树的效率,但是其原理和实现的复杂度要比红黑树简单多了,它是一种可以替代平衡树的数据结构,其数据元素默认按照key值升序,天然有序。Skip list让已排序的数据分布在多层链表中,以0-1随机数决定一个数据的向上攀升与否,通过“空间来换取时间”的一个算法,在每个节点中增加了向前的指针,在插入、删除、查找时可以忽略...

2018-12-05 11:21:53 571

转载 MySQL优化原理简介

MySQL逻辑架构如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器。下图展示了MySQL的逻辑架构图。MySQL逻辑架构,来自:高性能MySQLMySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处理、授权认证、安全等功能均在这一层处理。MySQL大多数核心服务均在中间这一层,包括查询解析、分析、优化、缓存、内置...

2018-11-21 15:05:14 191

原创 哈希算法之 hashCode 为什么选择数字31作为优质乘子?

哈希算法之 hashCode 为什么选择数字31作为优质乘子?详细说明 String hashCode 方法选择数字31的作为乘子的原因之前,我们先来看看 String hashCode 方法实现:public int hashCode() {int h = hash;if (h == 0 && value.length > 0) { char val[]...

2018-11-19 16:12:15 5258 6

转载 Nacos发布 v0.2 版本,无缝支持 Spring Cloud 微服务生态及高可用集群模式

近日,阿里巴巴新开源项目Nacos 发布了 v0.2 版本,该版本开始支持完整的Spring生态技术栈,这包括 Spring Framework、Spring Boot和Spring Cloud。为了让更多的Spring用户可以在生产上基于 Nacos 做微服务平台的服务发现、配置管理、服务管控,Nacos v0.2版本向下兼容了大部分Spring生态的版本,这其中包括SpringFramew...

2018-09-28 10:13:33 1059

转载 Tomcat架构详解

一、Tomcat顶层架构Tomcat的顶层结构图:Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。Service主要包含两个部分:Connector和Container。从上图中可以看出 Tomcat 的心脏就是这两个组件,他们的作用如下:Connector用于处理连接相关的事情,并提...

2018-09-27 13:09:38 1203

原创 谷歌大数据搜索工具——datasetsearch

谷歌最近推出了一个搜索引擎,准确来说是一款专门为数据分析、数据科学领域的人提供的数据搜索引擎。图片有图片的搜索引擎,视频有视频的搜索引擎,终于我们等来了数据的搜索引擎。总之以后你想要什么样的数据,就可以直接在这个网站里搜索关键词,都能找到相关的数据。这些数据包含是谁提供了这个数据集合,数据的发布时间,数据收集方式,使用数据的条款等,可谓是应有尽有。如图: 这个搜索工具我认为不光是...

2018-09-11 17:36:22 10960

原创 微服务架构之阿里巴巴开源限流降级中间件Sentinel

Sentinel简介随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。说的简单一点,Sentinel是一个对资源调用的控制组件,主要涵盖限流、降级、负载保护等功能模块。Sentinel于2012年诞生,第一个版本的主要功能为入口流量控制。在之后的6年里,Sentinel 在阿里巴巴...

2018-08-15 10:41:52 4926

转载 微服务之互联网公司主流的技术选型

首先说下java技术人员所具备的基本能力 如何深入阅读源码 分布式架构随着我们的业务量越来越大和越重要,单体的架构模式已经无法对应大规模的应用场景,而且系统中决不能存在单点故障导致整体不可用,所以只有垂直或是水平拆分业务系统,使其形成一个分布式的架构,利用分布式架构来冗余系统消除单点的故障,从而提高整个系统的可用性。同时分布式系统的模块重用度更高,速度更快,扩展性更高是...

2018-08-07 11:24:38 1057

原创 微服务架构之千万级调用量架构实践

随着微服务的兴起,微服务的应用越来越广,要求也越来越高,当然系统复杂度也是逐渐递增 微服务架构在大型电商中的运用1、传统电商业务困境高可用性高可伸缩架构柔性数据实时平台开放如图: 2、传统大型电商系统的架构数据层,埋点数据把用户行为数据,实时数据存储在NoSQL、关系型数据库、大数据平台 。 基础架构层 这层实际上是中间件和服务,包括MQ的消息...

2018-08-07 09:28:39 1041

原创 分布式架构之CAP定理

分布式(distributed system)正越来越成为互联网发展的重头戏,大型网站几乎都是分布式的。然而分布式系统的最大难点就是各个节点的状态如何同步。解决此问题,理解CAP 定理是理解分布式系统的基础。 分布式系统的三个指标1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标。ConsistencyAvailabilityPartit...

2018-08-05 17:48:40 376

转载 分布式架构之分布式事务TCC服务设计

TCC简介TCC是一种比较成熟的分布式事务解决方案,可用于解决跨库操作的数据一致性问题;TCC是服务化的两阶段编程模型,其Try、Confirm、Cancel 3个方法均由业务编码实现;其中Try操作作为一阶段,负责资源的检查和预留,Confirm操作作为二阶段提交操作,执行真正的业务,Cancel是预留资源的取消;如下图所示,业务实现TCC服务之后,该TCC服务将作为分布...

2018-08-04 20:48:12 1699

原创 微服务架构设计要点

要点一:API 网关 在实施微服务的过程中,不免要面临服务的聚合与拆分,当后端服务的拆分相对比较频繁的时候,往往需要一个统一的入口,将不同的请求路由到不同的服务,这就不得不提到API网关,API网关优势简单的数据聚合可以在网关层完成,避免后台复杂调用进行统一的认证和鉴权,尽管服务之间的相互调用比较复杂,接口也会比较多,API 网关往往只暴露必须的对外接口,并且对接口进行统...

2018-08-02 17:30:07 424

原创 算法精选--广度优先搜索

一、引言研究算法是很枯燥的一件事;但是找到规律以及通用之处,就会发现它是如此简单,如此妙不可言,但前提是需要有耐心。其中深度优先搜索和广度优先搜索是搜索算法里面比较基础的算法,理解以及实现也比较容易 结合实际问题详解Q:在一个二维地图中,从一个点到另一个点的最短路径(从1到0,输入终点位置,输出最少步数) ,如图: 解决方案深度优先搜索 看到深度优...

2018-07-30 14:42:56 229

原创 微服务架构—服务增强组件Nepxion Discovery

Nepxion Discovery是一款对Spring Cloud的服务注册发现的增强中间件,其功能包括多版本灰度发布,黑/白名单的IP地址过滤,限制注册等,支持Eureka、Consul和Zookeeper,Spring Cloud微服务可以方便引入该插件,并且代码零侵入,引入注意事项如下:引入相关Plugin Starter依赖到pom.xml必须为微服务定义一个版本号(version...

2018-07-28 18:53:04 6638

转载 分布式集群全局ID生成--SnowFlake算法

方法一:UUIDUUID是通用唯一识别码 (Universally Unique Identifier),在其他语言中也叫GUID,可以生成一个长度32位的全局唯一识别码。 String uuid = UUID.randomUUID().toString() 结果示例:046b6c7f-0b8a-43b9-b35d-6489e6daee91缺点: 1、占用32位,太...

2018-07-22 20:37:21 909

转载 微服务架构--统一配置中心的方案设计

演进中的配置当我们是一个单机服务的是,我们的配置通常写在一个文件中的,代码发布的时候,把配置文件和程序推送到机器上去。 当随着业务的用户量增加,通常我们会把我们的服务进行多机器(集群)部署。这时候,配置的发布就变成了如下: 业务的急剧扩张,导致单机服务无法满业务需求。这时候需要对单体大服务进行切开,服务走向SOA(微服务化)。 这种场景中,配置文件的部署可能如上图所示...

2018-07-22 19:47:30 3768

转载 蚂蚁金服开源 ——基于 SOFABoot 进行模块化开发

SOFA 中间件是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics监控度量,分布式高可用消息队列,分布式事务框架,分布式数据库代理层等组件,是在金融场景里锤炼出来的最佳实践。SOFABoot 是蚂蚁金服中间件团队开源的基于 Sprin...

2018-07-19 11:35:50 6973

原创 技术转管理之5问

 想要成为一名管理者,并不是做个决定这么简单,做管理需要一套完全不同的技能。好的架构师,好的技术专家,并不一定代表一个好的管理者。如何确定自己是不是适合管理岗位呢?可以先问问自己下面五个问题。问题1:你的兴趣在哪,技术专家,还是带团队?有没有想过自己五年后在做什么,届时是否工作得开心?做技术专家,带团队做事情,还是自己创业,搞清楚自己想要什么最重要。问问自己,做管理对你有什...

2018-07-16 23:10:54 188

转载 微服务架构——秒杀限流方案设计实现

限流再牛逼的机器,再优化的设计,对于特殊场景我们也是要特殊处理的。就拿秒杀来说,可能会有百万级别的用户进行抢购,而商品数量远远小于用户数量。如果这些请求都进入队列或者查询缓存,对于最终结果没有任何意义,徒增后台华丽的数据。对此,为了减少资源浪费,减轻后端压力,我们还需要对秒杀进行限流,只需保障部分用户服务正常即可。就秒杀接口来说,当访问频率或者并发请求超过其承受范围的时候,这时候我们就...

2018-07-16 22:46:36 4403

原创 微服务架构——分布式锁探索

     本问主要针对zookpeer、redis实现分布式锁进行探讨,文中有什么不严谨之处,欢迎批评指正。redis方面:有开源redisson的jar包供你使用。zookpeer方面:有开源的curator的jar包供你使用    需要说明的是,Google有一个名为Chubby的粗粒度分布锁的服务,然而,Google Chubby并不是开源的,我们只能通过其论文和其他相关的文档中了解具体的细...

2018-07-16 13:02:35 2066 6

转载 高可用Redis服务架构分析与搭建

   基于内存的Redis应该是目前各种Web开发业务中最为常用的Key-Value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较MySQL而言,速度有数量级的提升),做简单的消息队列(LPUSH和BRPOP)、订阅发布(PUB/SUB)系统等等。规模比较大的互联网公司,一般都会有专门的团队,将Redis存储以基础服务的形式提供给各个业务调用,不过...

2018-07-15 19:31:02 171

转载 蚂蚁围炉夜话回顾:从容应对数据高并发访问和一致性的挑战

   云原生(Cloud-Native)到底是什么?这个问题一直很难定义。CNCF技术监督委员会最近通过投票确定了其官方定义。如何使其弹性可扩展、稳定高可用、敏捷易维护等特性应用到现有创新场景? 蚂蚁金服在 7 月 6 日与 ArchSummit 深圳合作举办云原生架构探讨晚场技术交流活动,邀请微服务、中间件、应用开发架构、分布式事务解决方案等技术专家,共同讨论云原生、容器、微服务、海量数据访问等...

2018-07-15 18:19:18 306

原创 时间管理的分享

IT 行业加班是非常普遍的现象,目前也没特别好的改善方式。存在即合理,我们要做的是,如何在紧张的工作之中,合理的规划自己的宝贵时间,让我们有更多的时间学习新技术的同时,出色完成工作任务,直接进正题:1. 理论  看过很多时间管理方面的书籍和资料,最为推荐的是《时间管理:如何充分利用你的24小时(漫画版)》。书原因:1 到 2 小时肯定能读完,非常精简内容幽默,可落地看完这本书后,我们就可以规划自己...

2018-07-15 17:44:31 1116

转载 微服务架构——路由网关Spring Cloud Gateway

一、概述1.关于Spring Cloud FinchleySpring Cloud Finchley是6月19日Spring官方正式发布GA版本,Finchley.Release支持了Spring Boot2.0,要求起步JDK8,支持JDK9,Finchley版本带了新的子项目,包括对原先版本的子项目的升级,原先支持的组件现在已经全部为2.0.0.Release,并且在官方的版本生命周期公告中说...

2018-07-10 17:54:01 21269

转载 高并发之限流方案

首先,我们来说一下什么是大流量?大流量,我们很可能会冒出:TPS(每秒事务量),QPS(每秒请求量),1W+,5W+,10W+,100W+...。其实并没有一个绝对的数字,如果这个量造成了系统的压力,影响了系统的性能,那么这个量就可以称之为大流量了。其次,应对大流量的一些常见手段是什么?缓存:说白了,就是让数据尽早进入缓存,离程序近一点,不要大量频繁的访问DB。降级:如果不是核心链路,那么就把这个...

2018-06-28 21:47:24 2637

转载 蚂蚁金服经典服务化架构往 Service Mesh 方向的演进过程

 蚂蚁金服是如何实现经典服务化架构往 Service Mesh 方向的演进的?前言 在过去的一段时间中蚂蚁金服已经开始采用 Service Mesh 来帮助解决一些架构上的问题,并且在 Service Mesh 如何更好地与经典的服务化架构结合上有一定的经验,希望借此分享和大家交流我们这部分的实践。使大家对蚂蚁金服当前的服务化架构有更多了解,并对 Service Mesh 如何解决经典服务化架构中...

2018-06-18 23:59:23 612

转载 微服务架构—携程Apollo配置中心架构剖析

一、介绍Apollo(阿波罗)[参考附录1]是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。Apollo目前在国内开发者社区比较热,在Github上有超过5k颗星,在国内众多互联网公司有落地案例,可以说Apollo是目前配置中心产品领域Number1的产品,...

2018-06-08 09:23:17 3361

转载 微服务之核心架构思维

一、介绍架构的本质是管理复杂性,抽象、分层、分治和演化思维是我们工程师/架构师应对和管理复杂性的四种最基本武器。最近团队来了一些新人,有些有一定工作经验,是以高级工程师/架构师身份进来的,但我发现他们大部分人思维偏应用和细节,抽象能力弱。所以作为团队技术培训的一部分,我整理了这篇文章,希望对他们树立正确的架构设计思维有帮助。我认为,对思维习惯和思考能力的培养,其重要性远远大于对实际技术工具的掌握。...

2018-05-31 10:35:29 2250

转载 微服务建构下缓存使用策略

缓存由于其适应高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存。又或者是先删除缓存,再更新数据库,其实大家存在很大的争议。本文由以下三个部分组成1、讲解缓存更新策略2、对每种策略进行缺点分析3、针对缺点给出改进方案    从理论上来说,给缓存设置过期时间,是保证最终一致性的...

2018-05-26 17:34:34 1417

转载 TCP Nagle算法简述

TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。(一个连接会设置MSS参数,因此,TCP/IP希望每次都能够以MSS尺寸的数据块来发送数据)。Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。(减少大量小包的发送)Nagle算法的基本定义是任意时...

2018-05-25 17:02:31 1973

转载 RESTful API 设计

今天,我将介绍RESTful API的设计细节,探讨如何设计一套合理、好用的API。我的主要参考了两篇文章(1,2)。一、协议API与用户的通信协议,总是使用HTTPs协议。二、域名应该尽量将API部署在专用域名之下。https://api.example.com如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。https://example.org/api/三、版本(Vers...

2018-05-24 15:24:29 1262

转载 HashMap 和 ConcurrentHashMap 全解析

Java7 HashMapHashMap 是最简单的,一来我们非常熟悉,二来就是它不支持并发操作,所以源码也非常简单。首先,我们用下面这张图来介绍 HashMap 的结构。这个仅仅是示意图,因为没有考虑到数组要扩容的情况,具体的后面再说。大方向上,HashMap 里面是一个数组,然后数组中每个元素是一个单向链表。上图中,每个绿色的实体是嵌套类 Entry 的实例,Entry 包含四个属性:key,...

2018-05-23 00:26:32 196

转载 微服务架构实施原理

微服务架构实施原理 ...

2018-05-13 00:39:45 758

转载 分布式锁的多种实现方式

       目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都...

2018-05-08 10:24:15 230

原创 微服务架构下数据库分表算法

数据库水平分表算法实现介绍如下:一:实现思想      以MurmurHash算法为基础,在MurmurHash算法进行必要改造,本次主要进行64分表,即分为64个主表,实现思想简介如下:      1、MurmurHash生成hashcode      ---详细可看代码      2、hashcode取模64生成分表下表,---详细可看代码      3、分表的下表拼接            ...

2018-05-03 13:17:36 1371

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除