架构设计
文章平均质量分 65
damon2636
卖女孩的小火柴
展开
-
思考:如何保证服务稳定性?
混沌工程是近几年比较火的名词,通过不断给系统找麻烦来验证并完善系统能力,阿里在这块花了很大的精力建设红蓝军对抗攻防,进行定期和不定期的演练,最后以打分的形式来给各个部门系统做排名,除了系统层面的故障演练外还有资金演练,篡改线上sql语句制造资损来测试业务监控纠错的能力,通过制造小错来避免大错。:起源于15年某施工队将光纤挖断带来的支付宝故障,由此出来的三地五中心和单元化架构,异地多活本身的成本比较高,然后又存在数据同步的延时问题和切流带来的脏数据问题,对于业务和技术都有比较高的要求。转载 2023-01-05 15:35:36 · 621 阅读 · 0 评论 -
如何通过CQRS架构高效解决12306的库存问题
12306主要性能问题还是出在出票和余票查询。当前通过CQRS架构结合聚合根在内存、事件回溯的手段来解决以上两个问题。 实现了买票、退票、站点最多可卖座位数限制、 站点间预留票(最低保留座位数,最多可卖座位数)、取消预留票功能。主要用到两个数据结构为跳表、位图。假设车次k41有途径4个站点分别为1,2,3,4,总共8个座位。1.初始化车次站点票信息10002 表示表示站点1到站点2, 0000 0000 表示有8个座位,下标从0-7.20003 表示表示站点2到站点3, 0000 0000 表..原创 2022-02-10 11:42:00 · 672 阅读 · 0 评论 -
你应该知道的计算机延迟数字
了解常见的计算机延迟,有助于架构设计和问题排查。比如互斥锁延迟,硬盘存取延迟,网络延迟等等。通过了解不同设备或环境的延迟的数量级,就很容易理解redis为什么比mysql快很多,异地多活架构有多难。本文从微观的CPU时钟延迟开始,到宏观的异地双机房网络延迟,描述各种延迟的数量级。延迟的定义如下是维基百科对延迟的定义:Latencyfrom a general point of view is a time delay between the cause and the effect of.转载 2021-06-17 17:08:29 · 733 阅读 · 0 评论 -
没有关系数据库、事务如何做一个交易系统
之前一次心签到有提到如果没有关系数据库、没有事务我们要如何做一个在线交易的系统。这个对于以往重度依赖数据库、事务机制开发的同学会一头雾水,这要如何去做?我相信也有一部分人会觉得很疑惑。这和我以往开发的方式完全不一样?很多时候在一个分布式的系统里面我们是很难做到ACID的机制的,所以又演化出BASE理论,BASE理论是允许或容忍系统出现暂时性的问题。那如何应用这个理论来解决我上面说的这个问题。那提出一个新的观念:补偿事务。我们可以通过现实生活中的例子来看看是怎么做的。比我我现在要出差,首先要请假、买机票这两.原创 2021-03-10 00:47:32 · 137 阅读 · 0 评论 -
同步调用与异步调用分析
服务与服务间的调用方式分为两种同步调用、异步调用。同步调用可以理解为A打电话给B,需要实时响应,异步调用类似A给B发送邮件,B不需要马上回复。这两种调用方式应该说都有的优缺点。但是在面对一个高并发吞吐量的系统,异步方式比同步方式可以大大增加系统的吞吐量。A,B,C,E可以同时给F发送邮件,F可以不在线,不用立即回复。对于服务化后服务与服务之间的调用也类似这样一个原理。同步调用虽然只是耦合外部接口,实时性上会高于异步调用,但是会带来很多的问题。1.调用方的吞吐量受限于被调用方的吞吐量,一旦某个服务响应特..原创 2021-03-05 21:58:17 · 1458 阅读 · 0 评论 -
盘点一下我用kafka两年以来踩过的一些非比寻常的坑
前言我的上家公司是做餐饮系统的,每天中午和晚上用餐高峰期,系统的并发量不容小觑。为了保险起见,公司规定各部门都要在吃饭的时间轮流值班,防止出现线上问题时能够及时处理。我当时在后厨显示系统团队,该系统属于订单的下游业务。用户点完菜下单后,订单系统会通过发kafka消息给我们系统,系统读取消息后,做业务逻辑处理,持久化订单和菜品数据,然后展示到划菜客户端。这样厨师就知道哪个订单要做哪些菜,有些菜做好了,就可以通过该系统出菜。系统自动通知服务员上菜,如果服务员上完菜,修改菜品上菜状态,用户就知道哪些菜..转载 2021-03-05 14:33:15 · 125 阅读 · 0 评论 -
256变4096: 分库分表扩容如何实现平滑数据迁移?
一 背景2020年,笔者负责的一个高德打车弹外订单系统进行了一次扩分库分表和数据库迁移。该订单系统整体部署在阿里云上,服务使用阿里云ECS部署,数据库采用阿里云RDS,配置中心基于阿里云ACM自研,数据同步基于阿里云DTS自研以及自研分库分表组件、分布式ID组件等等。此次进行扩分库分表的背景是,原4实例4库、每个库64张表一共256张表,部分单表已超千万量级,按当前每日单量量级,一年内单表会达到上亿条记录,单表数据量过大会带来数据库性能问题。注:[弹内弹外]弹是指弹性计算,弹内与弹外其实是指..转载 2021-03-05 14:29:32 · 234 阅读 · 0 评论 -
排队(顺序消费)+Group commit
阿里早期开源过一个mysql的分支alisql,他有一个特性特别吸引人,支持在mysql 引擎层对单条数据的修改进行排队的功能。这个特性能给我带来什么样的好处呢?比如我们现在有一个需求要做微博点赞量的计数器,在不用redis缓存相关技术,基于现有的技术很难做到高性能。而alisql为我们考虑的这个问题,mysql我们都知道如果一条记录存在同一个时间非常多线程去更新的时候性能非常的差。列出一个测试数据:mysql 5.6 版本,8个线程同时更新一条记录的TSP大概是4.3k,当加大512个线程去更新...原创 2021-03-04 22:55:34 · 285 阅读 · 1 评论 -
EDA事件驱动架构
事件驱动架构应该说是一种非常流行的分布式架构模式,他的经常会被用在构建一个可伸缩性的应用上,当然小型系统也同样适用。 Node用来表示一个节点,每个节点负责处理业务逻辑,Event表示这个节点处理完后产生的消息,通过通过消息中间件传递给另外一个Node。他不同于传统的SOA架构,rpc调用的方式,他是一个pub-sub的模式,节点与节点间不需要知道对方的存在,每个节点只关心自己要处理的消息,这个从耦合性上来说对比RPC调用是否非常低的,节点和节点之间不存在任何的依赖...原创 2021-03-03 23:12:49 · 1011 阅读 · 1 评论 -
分库分表后如何解决不同维度查询的问题
背景大家在进行分库分表的时候应该有碰到一个问题,一个数据需要根据两种维度进行查询,但是我们在进行分库分表是只能根据一种维度进行。比如:用户购买了商品产生了订单,当用户非常多的时候,我们会选择订单根据下单用户的ID进行分库分表。但是这里面存在一个问题就是作为卖家要如何查询我卖出的所有订单呢?因为订单是根据用户id规则进行分库分表的,卖家订单查询接口物理上是无法一次查询出当前的订单的,应该他分别分布在不同的订单库或者订单表中的,有可能我查询一个订单列表,需要跨非常多的表,这个样性能是非常低效的。有没一种有效的原创 2021-03-02 23:55:49 · 1345 阅读 · 0 评论 -
如何通过Java实现一个高性能API网关
先不谈论要实现的功能,API网关我觉得主要指标就是性能,性能要想上的我觉得可以通过以下两个技术栈实现。1.非阻塞基于servelt 3.1异步io技术,spring 5 webflux, netty自定义http server都是实现非阻塞请求的方案。2.协程kotlin,Quasar都提供了协程的功能,在api网关后续业务处理及消息转发时,我们可以选择协程的方式来替代线程的模型,极大能够增加并发处理数量。Kong 看着一堆lua脚本头晕,spring Gateway, zuul2 他们都是优秀的A原创 2021-02-07 21:56:00 · 1161 阅读 · 1 评论 -
微服务编排之道
本文转自微信号EAWorld。扫描下方二维码,关注成功后,回复“普元方法+”,将会获得热门课堂免费学习机会!本文转自微信号EAWorld。目录:一、微服务需要编排吗?二、微服务编排的流程三、微服务编排的一致性四、微服务编排的监控工具支撑一、微服务需要编排吗?微服务是一种新的软件架构风格。在微服务体系结构中,可以将应用分解为多个较小服务, 各个服务可以由独立的团队进行开发、部署。...转载 2020-04-08 20:41:27 · 289 阅读 · 0 评论 -
Java 异常处理的误区和经验总结
本文着重介绍了 Java 异常选择和使用中的一些误区,希望各位读者能够熟练掌握异常处理的一些注意点和原则,注意总结和归纳。只有处理好了异常,才能提升开发人员的基本素养,提高系统的健壮性,提升用户体验,提高产品的价值。误区一、异常的选择图 1. 异常分类图 1 描述了异常的结构,其实我们都知道异常分检测异常和非检测异常,但是在实际中又混淆了这两种异常的应用。由于非检测异常转载 2016-09-12 13:01:44 · 554 阅读 · 0 评论 -
架构必备:Rate limiting 的作用和常见方式
原文 http://blog.eood.cn/rate-limiting Rate limiting 在 Web 架构中非常重要,是互联网架构可靠性保证重要的一个方面。从最终用户访问安全的角度看,设想有人想暴力碰撞网站的用户密码;或者有人攻击某个很耗费资源的接口;或者有人想从某个接口大量抓取数据。大部分 人都知道应该增加 Rate limiting,做请求频率限制。从安全转载 2016-09-17 10:24:35 · 1600 阅读 · 0 评论 -
高并发系统之限流特技
原文出处:张开涛 在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹;而降级是当服务出问题或者影响到核心流程的性能则需要暂时屏蔽掉,待高峰或者问题解决后再打开;而有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀、抢购)、写服务(如评论、下单)、频繁的复杂查询(评论的最后几页),因此需有一种手段...转载 2016-09-18 10:41:16 · 733 阅读 · 0 评论 -
异常处理最佳实践
转载:http://www.iteye.com/topic/72170 为什么要在J2EE项目中谈异常处理呢?可能许多java初学者都想说:“异常处理不就是try….catch…finally吗?这谁都会啊!”。笔者在初学java时也是这样认为的。如何在一个多层的j2ee项目中定义相应的异常类?在项目中的每一层如何进行异常处理?异常何时被抛转载 2016-09-22 19:38:17 · 3056 阅读 · 0 评论 -
Java异常:选择Checked Exception还是Unchecked Exception?
Java包含两种异常:checked异常和unchecked异常。C#只有unchecked异常。checked和unchecked异常之间的区别是:Checked异常必须被显式地捕获或者传递,如Basic try-catch-finally Exception Handling一文中所说。而unchecked异常则可以不必捕获或抛出。Checked异常继承java.lang.Exce转载 2017-03-28 18:51:36 · 486 阅读 · 0 评论 -
一个故事讲清楚 NIO
http://blog.jobbole.com/88984/假设某银行只有10个职员。该银行的业务流程分为以下4个步骤:1) 顾客填申请表(5分钟);2) 职员审核(1分钟);3) 职员叫保安去金库取钱(3分钟);4) 职员打印票据,并将钱和票据返回给顾客(1分钟)。我们看看银行不同的工作方式对其工作效率到底有何影响。1 BIO方式每来一个顾客,马上转载 2017-11-02 12:51:28 · 260 阅读 · 0 评论 -
java应用中嵌入groovy
需求: 某高校博士录取分数线录取算法是这样的: 1、 硕博连读考生为外语45分以上(含45分,下同), 综合成绩(初试总分*0.7+复试分数*0.3)不低于60分; 2、 普通考生(经济管理学院除外)为外语45分以上,专业课60分以上,综合成绩(初试总分/3*0.7+复试分数*0.3)不低于60分; 3、 经济管理学院(001)考生外语55分以上,专业课60分以上转载 2018-01-31 11:44:16 · 715 阅读 · 0 评论 -
复杂性应对之道 - 领域建模
为什么要领域建模软件的世界里没有银弹,是用事务脚本还是领域模型没有对错之分,关键看是否合适。就像自营和平台哪个模式更好?答案是都很好,所以亚马逊可以有三方入住,阿里也可以有自建仓嘛。实际上,CQRS就是对事务脚本和领域模型两种模式的综合,因为对于Query和报表的场景,使用领域模型往往会把简单的事情弄复杂,此时完全可以用奥卡姆剃刀把领域层剃掉,直接访问Infrastructure。我个人也是坚决...转载 2018-04-27 11:17:56 · 313 阅读 · 0 评论 -
SOFA企业应用框架
前言从业这么多年,接触过银行的应用,Apple的应用,eBay的应用和现在阿里的应用,虽然分属于不同的公司,使用了不同的架构,但有一个共同点就是都很复杂。导致复杂性的原因有很多,如果从架构的层面看,主要有两点,一个是架构设计过于复杂,层次太多能把人绕晕。另一个是根本就没架构,ServiceImpl作为上帝类包揽一切,一杆捅到DAO(就简单场景而言,这种Transaction Script也还凑合,...转载 2018-04-27 11:19:04 · 405 阅读 · 0 评论 -
RESTful规范
什么是RESTful一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。一、URI规范1.不用大写;2.用中杠 - 不用下杠 _ ;3.参数列表要encode;4.URI中的名词表示资源集合,使用复数形式。5.在RESTful架构中,每个网址代表...原创 2018-09-27 18:48:51 · 792 阅读 · 0 评论 -
缓存一致性和跨服务器查询的数据异构解决方案canal
当你的项目数据量上去了之后,通常会遇到两种情况,第一种情况应是最大可能的使用cache来对抗上层的高并发,第二种情况同样也是需要使用分库分表对抗上层的高并发。。。逼逼逼起来容易,做起来并不那么乐观,由此引入的问题,不见得你有好的解决方案,下面就具体分享下。 一:尽可能的使用Cache 比如在我们的千人千面系统中,会针对商品,订单等维度为某一个商家店铺自动化建立大约400...转载 2018-10-29 15:41:33 · 236 阅读 · 0 评论 -
java并发编程之Condition
在java中,对于任意一个java对象,它都拥有一组定义在java.lang.Object上监视器方法,包括wait(),wait(long timeout),notify(),notifyAll(),这些方法配合synchronized关键字一起使用可以实现等待/通知模式。同样,Condition接口也提供了类似Object监视器的方法,通过与Lock配合来实现等待/通知模式。为了更好的...转载 2018-11-30 16:00:52 · 146 阅读 · 0 评论 -
ActiveMQ讯息传送机制以及ACK机制详解
优良自学吧提供ActiveMQ讯息传送机制以及ACK机制详解,ActiveMQ消息传送机制以及ACK机制详解 AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送ActiveMQ消息传送机制以及ACK机转载 2015-06-29 17:47:21 · 1029 阅读 · 0 评论 -
java exception 和 runtimeException的区别
转载地址:http://jiangyingji1.blog.163.com/blog/static/17163034020111023105410991/RuntimeException 是属于unchecked (java 编译器允许不catch)表示一类 未知的不确定的只有在运行时才会出现的异常。 而非RuntimeException 是checked (java 编译器必须要转载 2016-08-17 17:05:52 · 320 阅读 · 0 评论 -
阿里、百度、搜狐等公司社招面试记录与总结
这个跳槽季大概面试了近十家公司,也拿到了几个Offer,现在面试告一段落,简单总结下面经,我现在主要的方向是Java服务端开发,把遇到的问题和大家分享一下,也谈谈关于技术人员如何有方向的提高自己,做到有的放矢。一、面试遇到的问题 1.百度 百度最近真是炙手可热,贴吧事件刚结束,医疗竞价排名又闹得沸沸扬扬,一些论坛上连带程序员都开始招黑了,友谊的小船可是说转载 2016-08-05 18:27:21 · 7525 阅读 · 1 评论 -
秒杀核心设计(减库存部分)-防超卖与高并发
商品详情页面的静态化,varnish加速,秒杀商品库独立部署服务器这种就略过不讲了。只讨论库存部分的优化mysql配置层面的优化可以参考我的这篇文章 《关于mysql innodb引擎性能优化的一点心得》重点设计在数据库层面。2张表:第一张:判重表(buy_record),该用户有没秒杀过该商品字段: id, uid, goods_id, addtime转载 2016-06-22 11:00:18 · 5064 阅读 · 0 评论 -
如何用消息系统避免分布式事务?
JUnit—Java单元测试必备工具Java Socket应用---通信是这样练成的PHP进阶篇项目管理利器——maven本文作者: 伯乐在线 - meituanalibaba 。未经作者许可,禁止转载!欢迎加入伯乐在线作者团队。前阵子从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,转载 2015-08-19 16:10:55 · 1526 阅读 · 0 评论 -
Infinispan's GridFileSystem--基于内存的网格文件系统
简介Infinispan是JBoss Cache缓存框架的后续项目,它是一个开源的数据网格平台,用于访问分布式状态的群集节点。GridFileSystem(网格文件系统)是一个全新的实验性的API,这些API使Infinispan后端的网格数据像“文件系统”一样展示出来。这一系列API继承了JDK的File,InputStream和OutputStream类,创建了相应的:GridFi转载 2015-07-24 10:28:35 · 412 阅读 · 0 评论 -
Hazelcast
Hazelcast 3.3 发布,性能提升约达 2 倍Hazelcast 3.3 发布了,Hazelcast是一个高度可扩展的数据分发和集群平台,可用于实现分布式数据存储、数据缓存。该版本在性能上得以继续提升,提升接近两倍左右。详情请看发行说明。Hazelcast 特性包括:提供java.util.{Queue, Set, List, Map}分转载 2015-07-24 10:32:41 · 540 阅读 · 0 评论 -
分布式事务会面临的问题
回顾:spring事务一、Propagation : key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用:PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。 PRO转载 2015-06-11 07:30:36 · 559 阅读 · 0 评论 -
FastDFS 使用经验分享
经验一:FastDFS文件下载恢复原始文件名应用背景文件被上传到FastDFS后Storage服务端将返回的文件索引(FID),其中文件名是根据FastDFS自定义规则重新生成的,而不是原始文件名,例如: group2/M00/00/89/eQ6h3FKJf_PRl8p4AUz4wO8tqaA688.apk使用http下载时如不加处理,显示给用户的文件名会是这样的eQ6h3转载 2015-05-26 11:35:32 · 853 阅读 · 0 评论 -
ActiveMQ实现负载均衡+高可用部署方案
一、架构和技术介绍1、简介ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现2、activemq的特性1. 多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp RE转载 2015-05-17 23:31:25 · 488 阅读 · 0 评论 -
从Log4j迁移到LogBack的理由
无论从设计上还是实现上,Logback相对log4j而言有了相对多的改进。不过尽管难以一一细数,这里还是列举部分理由为什么选择logback而不是log4j。牢记logback与log4j在概念上面是很相似的,它们都是有同一群开发者建立。所以如果你已经对log4j很熟悉,你也可以很快上手logback。如果你喜欢使用log4j,你也许会迷上使用logback。更快的执行速度基于转载 2015-05-12 15:43:04 · 439 阅读 · 0 评论 -
理解OAuth 2.0
OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。本文对OAuth 2.0的设计思路和运行流程,做一个简明通俗的解释,主要参考材料为RFC 6749。一、应用场景为了理解OAuth的适用场合,让我举一个假设的例子。有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用转载 2015-04-09 14:35:34 · 583 阅读 · 0 评论 -
浅谈CSRF攻击方式
一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。二.CSRF可以做什么? 你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取转载 2015-04-09 14:36:23 · 415 阅读 · 0 评论 -
Dubbo的正确打开方式之基本接口定义及异常处理
为什么要写这篇文章呢?因为公司在使用Dubbo时并没有对Dubbo的用法做深入的了解,而是属于拿来就用,随着自己的想法来使用。这样很不好,就像天龙八部的鸠摩智练习错误的六脉神剑一样,方式不对,就容易走火入魔。下面是我近来在空闲时间对Dubbo的一些学习,也纠正了之前的一些错误用法,在此做一下记录:接口定义及异常处理原来错误的做法先说说最初使用时的做法:由于Provide转载 2015-12-23 03:27:07 · 1364 阅读 · 0 评论 -
geohash算法原理及实现方式
1、geohash特点2、geohash原理3、geohash的php 、python、java、C#实现代码4、观点讨论 w微博:http://weibo.com/dxl0321geohash有以下几个特点:首先,geohash用一个字符串表示经度和纬度两个坐标。某些情况下无法在两列上同时应用索引 (例如MySQL 4之前的版本,Google App Engine的数据层转载 2016-01-09 17:32:34 · 581 阅读 · 0 评论 -
ActiveMQ Redelivery Policy(讯息重发策略)
官方文档:http://activemq.apache.org/redelivery-policy.html在事务控制里抛出异常,txManager会进行rollback处理.(在activeMQ里,消息默认会redelivery到客户端6次,如果继续异常,消息会放到deadletter queue里(ActiveMQ.DLQ))。在以下三种情况中,消息会被再次传送给消费者:1转载 2016-03-16 06:27:11 · 1559 阅读 · 0 评论