秒杀系统技术解剖
我们知道秒杀类的活动对整个运营贡献是最大的,它的特点是瞬间流量俱增、请求数量远大于库存,导致保证下单扣库存准确性难度大,那我们前端、后端怎么做才能保证呢?下面是我的一些思考。 先来说说整体的设计理念,秒杀类的活动光靠水平扩展扩增机器只能是个备选方案,它的成本和收益不对等。那我们…
JVM解剖公园
实际上是不会的,理论上来说是可以的,这有点像针对锁的循环无关代码外提。然而如此优化的缺点是将锁的粒度增加太多,线程在执行循环时将会长时间独占锁 进程都拥有自己的虚拟内存空间,虚拟内存空间会映射到实际内存。例如,两个进程可以在相同的虚拟地址 0x42424242 中存储不同数据,…
避免过度设计
工程师通常认为自己是最聪明的,这第一个错误容易让自己过于工程化。我们计划了100件事,业务方会提出我们之前没有考虑到的第101件。如果我们解决了100个问题,那么接下来还可能会有1000个问题。我们以为一切都是掌握之中,然而实际完全不知道未来会发生什么 在系统中,共享逻辑和抽象…
Mysql高级使用和技巧
查询上来说,普通索引查找到满足条件的记录后会接着查找下一个记录(innodb的数据是按页读写的),判断是否满足。然而唯一索引是查询到了就立即返回了。所以如果你明确知道只有一条结果则应该加上limit 1 更新上来说,普通索引会用到charge buffer优化,将更新操作记录在…
微服务架构之Msgpack序列化最佳实践
任何Java序列化工具,序列化/反序列化的时候,都是通过反射去遍历Class属性,然后挨个生成byte数组。Msgpack序列化的时候,filed不写key,只写index,类似数组,它的编码方式是type+length+body,这样传输时整体包会小很多,另外Msgpack支…
微服务架构之网关层Zuul剖析
可以看到其架构主要分为发布模块、控制管理加载模块、运行时模块、线程安全的请求上下文模块。在Spring Cloud中,Zuul每个后端都称为一个Route,为了避免资源抢占,整合了Hystrix进行隔离和限流,基于线程的隔离机制,另外一种机制是信号量,后面文章会提到。Zuul默…
分布式系统之一致性哈希算法
一致性哈希是用来解决缓存节点删除增加或者微服务架构中的粘性负载均衡后端节点删除增加时,避免大部分节点缓存失效的一种算法。原理是将对象和节点都进行相同hash算法( MurmurHash, MetroHash or SipHash1–3,SHA-1 or MD5)处理后映射到一个…
leetcode并发题目解题报告JAVA版
The same instance of Foo will be passed to three different threads. Thread A will call first(), thread B will call second(), and thread C w…
ChZANYVYJN
敏捷开发之LinkedIn的高效代码评审技巧
阅读和代码评审是每个工程师在日常工作中都要做的事情,然而一个标准的code review流程,实际上很难落地,它要求每次代码变更在部署到生产环境前,甚至是在提交合并前,都需要被另外一个小组成员进行正式的评审。在LinkedIn公司,自从2011年起code review成为了开…
程序员都应该了解的运维知识经验
常见的URL格式是http://www.liangsonghua.me,由协议+域名+端口号组成,这里涉及到一个不可轻视的知识点,就是跨域,浏览器有一个同源策略限制,协议、域名、端口号有一个不同就会发生跨域冲突,从而保证了其他站点不能非法操作正常站点的cookie和修改dom元…
前中台拆分标准
个性化定制类功能,例如某个页面的楼层配置、这种业务渠道不同、配置差异很大,不具有中台通用性,诸如此类个性化很强的模块划规至前台。临时类业务,使用期限只有一段时间、后续会废弃的逻辑保留在前台,使其能灵活添加以及丢弃 前台可有自己的数据存储、用于存储一些个性化、定制化较强的数据。前…
深度解析NIO底层
1、BIO的应用每来一个请求都会起一个线程去接待。 2、NIO的应用会有一个accepter线程专门负责接待。 所以NIO在做高并发和高吞吐量服务时比BIO更加适合,并且在长链接的情况下,同一时间对CPU的利用率也更高。 2、fd 类似于一种请求事件(Socket描述符).有一…
分布式系统之Raft共识算法
分布式系统除了提升整个体统的性能外还有一个重要特征就是提高系统的可靠性。提供可靠性可以理解为系统中一台或多台的机器故障不会使系统不可用或者丢失数据。保证系统可靠性的关键就是多副本,一旦有多副本,那么就面临多副本之间的一致性问题一致性算法正是用于解决分布式环境下多副本之间数据一致…
Kafka中的恰好一次交付
任何时候都可能发生Broker节点下线,针对这种情况,Kafka保证了每条消息被持久化并且冗余多份(作者按:建议约定topic的配置replication.factor参数值必须大于1,要求每个 partition必须有至少2个副本)。不过也有可能生产者到Broker节点的RP…
微服务架构之我们应该从Dubbo中学到什么
大凡发展的比较好的框架,都遵守微核的理念, Eclipse的微核是OSGi(依赖META-INF/MANIFEST.MF配置), Spring的微核是BeanFactory,Maven的微核是Plexus,Dubbo的微核是SPI(依赖META-INF/services/com…
如何实现Spring框架中的AOP
创建织入点AopProxy,可以通过getProxy方法获取代理后的对象。使用CGLIB生成动态代理,生成Enhancer实例,并指定用于处理代理业务的回调类 完成了织入之后,我们要考虑另外一个问题:对什么类以及什么方法进行AOP?对于“在哪切”这一问题的定义,我们又叫做“Po…
京东技术解密之配置中心DUCC
支持Log4j、Log4j2、Logback的动态修改日记级别功能。 可以看到在PostProcessBeanFactory方法中,实例化了ConfiguratorManager和Observer,并把Manager设置为Observer的成员变量。另外构造了一个包含Manag…
深入理解Apache Kafka
Kafka由LinkedIn公司于2011年推出,自那时起功能逐步迭代,目前演变成一个完整的平台级产品,它允许您冗余地存储巨大的数据量,拥有一个具有巨大吞吐量(数百万/秒)的消息总线,并且支持实时流任务处理。总的来说,Kafka是一个分布式,可水平扩展,容错的日志提交系统 我们…
微服务架构之容错Hystrix
假设单体应用可用率为99.99%,即使拆分后每个微服务的可用率还是保持在99.99%,总体的可用率还是下降的。因为凡是依赖都可能会失败,凡是资源都是有限制的,另外网络并不可靠。有可能一个很不起眼的微服务模块高延迟最后导致整体服务不可用 每个熔断器默认维护10个bucket,每秒…