
转载
文章平均质量分 73
Aaron----
这个作者很懒,什么都没留下…
展开
-
分布式之缓存击穿
什么是缓存击穿在谈论缓存击穿之前,我们先来回忆下从缓存中加载数据的逻辑,如下图所示因此,如果黑客每次故意查询一个在缓存内必然不存在的数据,导致每次请求都要去存储层去查询,这样缓存就失去了意义。如果在大流量下数据库可能挂掉。这就是缓存击穿。场景如下图所示:我们正常人在登录首页的时候,都是根据userID来命中数据,然而黑客的目的是破坏你的系统,黑客可以随机生成一堆userID,然后将这些请求怼到你的...转载 2018-05-02 09:06:26 · 198 阅读 · 0 评论 -
高可用Redis服务架构分析与搭建
基于内存的Redis应该是目前各种Web开发业务中最为常用的Key-Value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较MySQL而言,速度有数量级的提升),做简单的消息队列(LPUSH和BRPOP)、订阅发布(PUB/SUB)系统等等。规模比较大的互联网公司,一般都会有专门的团队,将Redis存储以基础服务的形式提供给各个业务调用,不过...转载 2018-07-15 19:31:02 · 188 阅读 · 0 评论 -
微服务架构--统一配置中心的方案设计
演进中的配置当我们是一个单机服务的是,我们的配置通常写在一个文件中的,代码发布的时候,把配置文件和程序推送到机器上去。 当随着业务的用户量增加,通常我们会把我们的服务进行多机器(集群)部署。这时候,配置的发布就变成了如下: 业务的急剧扩张,导致单机服务无法满业务需求。这时候需要对单体大服务进行切开,服务走向SOA(微服务化)。 这种场景中,配置文件的部署可能如上图所示...转载 2018-07-22 19:47:30 · 3857 阅读 · 0 评论 -
分布式集群全局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 · 965 阅读 · 0 评论 -
分布式架构之分布式事务TCC服务设计
TCC简介TCC是一种比较成熟的分布式事务解决方案,可用于解决跨库操作的数据一致性问题;TCC是服务化的两阶段编程模型,其Try、Confirm、Cancel 3个方法均由业务编码实现;其中Try操作作为一阶段,负责资源的检查和预留,Confirm操作作为二阶段提交操作,执行真正的业务,Cancel是预留资源的取消;如下图所示,业务实现TCC服务之后,该TCC服务将作为分布...转载 2018-08-04 20:48:12 · 1755 阅读 · 0 评论 -
微服务之互联网公司主流的技术选型
首先说下java技术人员所具备的基本能力 如何深入阅读源码 分布式架构随着我们的业务量越来越大和越重要,单体的架构模式已经无法对应大规模的应用场景,而且系统中决不能存在单点故障导致整体不可用,所以只有垂直或是水平拆分业务系统,使其形成一个分布式的架构,利用分布式架构来冗余系统消除单点的故障,从而提高整个系统的可用性。同时分布式系统的模块重用度更高,速度更快,扩展性更高是...转载 2018-08-07 11:24:38 · 1099 阅读 · 0 评论 -
Tomcat架构详解
一、Tomcat顶层架构Tomcat的顶层结构图:Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务。Service主要包含两个部分:Connector和Container。从上图中可以看出 Tomcat 的心脏就是这两个组件,他们的作用如下:Connector用于处理连接相关的事情,并提...转载 2018-09-27 13:09:38 · 1253 阅读 · 0 评论 -
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 · 1111 阅读 · 0 评论 -
Java之多层链表:SkipList
SkipList介绍Skip List ,称之为跳表,SkipList有着不低于红黑树的效率,但是其原理和实现的复杂度要比红黑树简单多了,它是一种可以替代平衡树的数据结构,其数据元素默认按照key值升序,天然有序。Skip list让已排序的数据分布在多层链表中,以0-1随机数决定一个数据的向上攀升与否,通过“空间来换取时间”的一个算法,在每个节点中增加了向前的指针,在插入、删除、查找时可以忽略...转载 2018-12-05 11:21:53 · 629 阅读 · 0 评论 -
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 · 4656 阅读 · 0 评论 -
ElasticSearch亿级数据毫秒查询实现
面临问题:很多时候数据量大了,特别是有几亿条数据的时候,可能你会发现,跑个搜索怎么一下 5~10s。第一次搜索的时候,是 5~10s,后面反而就快了,可能就几百毫秒。说实话,ES 性能优化是不可能随手调一个参数,就可以万能的应对所有的性能慢的场景。也许有的场景是你换个参数,或者调整一下语法,就可以搞定,但是绝对不是所有场景都可以这样。性能优化:Filesystem Cache你往 ES...转载 2019-06-25 14:21:00 · 6299 阅读 · 0 评论 -
千万级并发的软件架构演进之路
基本概念分布式系统中的多个模块在不同服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部署在不同的服务器上,或两个相同功能的Tomcat分别部署在不同服务器上高可用系统中部分节点失效时,其他节点能够接替它继续提供服务,则可认为系统具有高可用性集群一个特定领域的软件部署在多台服务器上并作为一个整体提供一类服务,这个整体称为集群。如Zookeeper中的Master和Slave分...转载 2019-06-24 09:59:04 · 929 阅读 · 0 评论 -
蚂蚁围炉夜话回顾:从容应对数据高并发访问和一致性的挑战
云原生(Cloud-Native)到底是什么?这个问题一直很难定义。CNCF技术监督委员会最近通过投票确定了其官方定义。如何使其弹性可扩展、稳定高可用、敏捷易维护等特性应用到现有创新场景? 蚂蚁金服在 7 月 6 日与 ArchSummit 深圳合作举办云原生架构探讨晚场技术交流活动,邀请微服务、中间件、应用开发架构、分布式事务解决方案等技术专家,共同讨论云原生、容器、微服务、海量数据访问等...转载 2018-07-15 18:19:18 · 333 阅读 · 0 评论 -
蚂蚁金服开源 ——基于 SOFABoot 进行模块化开发
SOFA 中间件是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,包括微服务研发框架,RPC 框架,服务注册中心,分布式定时任务,限流/熔断框架,动态配置推送,分布式链路追踪,Metrics监控度量,分布式高可用消息队列,分布式事务框架,分布式数据库代理层等组件,是在金融场景里锤炼出来的最佳实践。SOFABoot 是蚂蚁金服中间件团队开源的基于 Sprin...转载 2018-07-19 11:35:50 · 7199 阅读 · 0 评论 -
高并发之限流方案
首先,我们来说一下什么是大流量?大流量,我们很可能会冒出:TPS(每秒事务量),QPS(每秒请求量),1W+,5W+,10W+,100W+...。其实并没有一个绝对的数字,如果这个量造成了系统的压力,影响了系统的性能,那么这个量就可以称之为大流量了。其次,应对大流量的一些常见手段是什么?缓存:说白了,就是让数据尽早进入缓存,离程序近一点,不要大量频繁的访问DB。降级:如果不是核心链路,那么就把这个...转载 2018-06-28 21:47:24 · 2700 阅读 · 0 评论 -
微服务架构实施原理
微服务架构实施原理 ...转载 2018-05-13 00:39:45 · 802 阅读 · 0 评论 -
分布式锁的多种实现方式
目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都...转载 2018-05-08 10:24:15 · 253 阅读 · 0 评论 -
TCP Nagle算法简述
TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。(一个连接会设置MSS参数,因此,TCP/IP希望每次都能够以MSS尺寸的数据块来发送数据)。Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。(减少大量小包的发送)Nagle算法的基本定义是任意时...转载 2018-05-25 17:02:31 · 2076 阅读 · 0 评论 -
微服务建构下缓存使用策略
缓存由于其适应高并发和高性能的特性,已经在项目中被广泛使用。在读取缓存方面,大家没啥疑问,都是按照下图的流程来进行业务操作。但是在更新缓存方面,对于更新完数据库,是更新缓存呢,还是删除缓存。又或者是先删除缓存,再更新数据库,其实大家存在很大的争议。本文由以下三个部分组成1、讲解缓存更新策略2、对每种策略进行缺点分析3、针对缺点给出改进方案 从理论上来说,给缓存设置过期时间,是保证最终一致性的...转载 2018-05-26 17:34:34 · 1478 阅读 · 0 评论 -
HashMap 和 ConcurrentHashMap 全解析
Java7 HashMapHashMap 是最简单的,一来我们非常熟悉,二来就是它不支持并发操作,所以源码也非常简单。首先,我们用下面这张图来介绍 HashMap 的结构。这个仅仅是示意图,因为没有考虑到数组要扩容的情况,具体的后面再说。大方向上,HashMap 里面是一个数组,然后数组中每个元素是一个单向链表。上图中,每个绿色的实体是嵌套类 Entry 的实例,Entry 包含四个属性:key,...转载 2018-05-23 00:26:32 · 226 阅读 · 0 评论 -
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 · 1391 阅读 · 0 评论 -
微服务之核心架构思维
一、介绍架构的本质是管理复杂性,抽象、分层、分治和演化思维是我们工程师/架构师应对和管理复杂性的四种最基本武器。最近团队来了一些新人,有些有一定工作经验,是以高级工程师/架构师身份进来的,但我发现他们大部分人思维偏应用和细节,抽象能力弱。所以作为团队技术培训的一部分,我整理了这篇文章,希望对他们树立正确的架构设计思维有帮助。我认为,对思维习惯和思考能力的培养,其重要性远远大于对实际技术工具的掌握。...转载 2018-05-31 10:35:29 · 2361 阅读 · 0 评论 -
微服务架构—携程Apollo配置中心架构剖析
一、介绍Apollo(阿波罗)[参考附录1]是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。Apollo目前在国内开发者社区比较热,在Github上有超过5k颗星,在国内众多互联网公司有落地案例,可以说Apollo是目前配置中心产品领域Number1的产品,...转载 2018-06-08 09:23:17 · 3406 阅读 · 0 评论 -
蚂蚁金服经典服务化架构往 Service Mesh 方向的演进过程
蚂蚁金服是如何实现经典服务化架构往 Service Mesh 方向的演进的?前言 在过去的一段时间中蚂蚁金服已经开始采用 Service Mesh 来帮助解决一些架构上的问题,并且在 Service Mesh 如何更好地与经典的服务化架构结合上有一定的经验,希望借此分享和大家交流我们这部分的实践。使大家对蚂蚁金服当前的服务化架构有更多了解,并对 Service Mesh 如何解决经典服务化架构中...转载 2018-06-18 23:59:23 · 648 阅读 · 0 评论 -
微服务架构——路由网关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 · 21694 阅读 · 0 评论 -
微服务架构——秒杀限流方案设计实现
限流再牛逼的机器,再优化的设计,对于特殊场景我们也是要特殊处理的。就拿秒杀来说,可能会有百万级别的用户进行抢购,而商品数量远远小于用户数量。如果这些请求都进入队列或者查询缓存,对于最终结果没有任何意义,徒增后台华丽的数据。对此,为了减少资源浪费,减轻后端压力,我们还需要对秒杀进行限流,只需保障部分用户服务正常即可。就秒杀接口来说,当访问频率或者并发请求超过其承受范围的时候,这时候我们就...转载 2018-07-16 22:46:36 · 4481 阅读 · 0 评论 -
InnoDB缓冲池-buffer pool
InnoDB的缓冲池缓存什么?有什么用?缓存表数据与索引数据,把磁盘上的数据加载到缓冲池,避免每次访问都进行磁盘IO,起到加速访问的作用。速度快,那为啥不把所有数据都放到缓冲池里?凡事都具备两面性,抛开数据易失性不说,访问快速的反面是存储容量小:(1)缓存访问快,但容量小,数据库存储了200G数据,缓存容量可能只有64G;(2)内存访问快,但容量小,买一台笔记本磁盘有2T,内存可能只有1...转载 2019-06-24 13:46:27 · 344 阅读 · 0 评论