面试
文章平均质量分 74
andy.cao
这个作者很懒,什么都没留下…
展开
-
布隆过滤器的使用
布隆过滤器1、单机版2、redis版本docker版本的布隆过滤器增加一个增加多个判断是否存在原创 2022-04-06 00:09:34 · 765 阅读 · 0 评论 -
DDD中的对象
“对象”这个词,对我们来说并不陌生。以最常见的面向对象为例,软件系统中的任何事物都被认为是一种对象。针对如何设计和实现这些对象,业内也有一些对应的开发模式。例如,一种传统的做法是从数据的角度来规划对象的组织形式,即先设计数据库模型,然后基于数据库模型设计对象,这些对象内部通常只包含数据属性的定义,也就是说整个开发过程是数据驱动(Data Driven)的。![在这里插入图片描述](https://img-blog.csdnimg.cn/19f8698645f34ec2b50edb3696629ff3.png原创 2022-04-05 23:49:46 · 696 阅读 · 0 评论 -
微服务架构最佳实践 - 方法篇
实施微服务需要避免踩的陷阱,简单提炼为:微服务拆分过细,过分强调“small”。微服务基础设施不健全,忽略了“automated”。微服务并不轻量级,规模大了后,“lightweight”不再适应。针对这些问题,今天我们看看微服务最佳实践应该如何去做。我会分两期介绍这部分内容,今天是微服务架构最佳实践的方法篇,下一期是基础设施篇。服务粒度针对微服务拆分过细导致的问题,我建议基于团队规模进行拆分,类似贝索斯在定义团队规模时提出的“两个披萨”理论(每个团队的人数不能多到两张披萨都不够吃的地步),分享一个我认为微原创 2022-04-05 15:59:36 · 276 阅读 · 0 评论 -
分层架构和SOA
高可用架构模式在最近几十年的迅猛发展来说,可扩展架构模式的发展可以说是步履蹒跚,最近几年火热的微服务模式算是可扩展模式发展历史中为数不多的亮点,但这也导致了现在谈可扩展的时候必谈微服务,甚至微服务架构都成了架构设计的银弹,高性能也用微服务、高可用也用微服务,很多时候这样的架构设计看起来高大上,实际上是大炮打蚊子,违背了架构设计的“合适原则”和“简单原则”。为了帮助你在实践中更好的进行可扩展架构设计,我将分别介绍几种可扩展架构模式,指出每种架构模式的关键点和优缺点。今天我来介绍传统的可扩展模式,包括分层架构和原创 2022-04-05 15:20:15 · 9532 阅读 · 0 评论 -
系统降级熔断限流和排队
这类问题的主要原因在于系统压力太大、负载太高,导致无法快速处理业务请求,由此引发更多的后续问题。最常见的情况就是,数据库慢查询将数据库的服务器资源耗尽,导致读写超时,业务读写数据库时要么无法连接数据库、要么超时,最终用户看到的现象就是访问很慢,一会儿访问抛出异常,一会儿访问又是正常结果。如果进一步探究,导致接口级故障的原因可以分为两大类:内部原因:包括程序 bug 导致死循环,某个接口导致数据库慢查询,程序逻辑不完善导致耗尽内存等。外部原因:包括黑客攻击,促销或者抢购引入了超出平时几倍甚至几十倍的用户,第三原创 2022-04-05 01:04:06 · 1434 阅读 · 1 评论 -
如何保证消息仅仅被消费一次?
你好,我是唐扬。通过上一节课,我们在电商系统中增加了消息队列对峰值写流量做削峰填谷,对次要的业务逻辑做异步处理,对不同的系统模块做解耦合。因为业务逻辑从同步代码中移除了,所以我们也要有相应的队列处理程序来处理消息、执行业务逻辑,这时你的系统架构变成了下面的样子:这是一个简化版的架构图,实际上,随着业务逻辑越来越复杂,会引入更多的外部系统和服务来解决业务上的问题。比如我们会引入 Elasticsearch 来解决商品和店铺搜索的问题,也会引入审核系统对售卖的商品、用户的评论做自动的和人工的审核,你会越来越多地原创 2022-03-31 00:21:07 · 675 阅读 · 0 评论 -
Snowflake算法
UUID 不能作为 ID 的另一个原因是它不具备业务含义,其实现实世界中使用的 ID 中都包含有一些有意义的数据,这些数据会出现在 ID 的固定的位置上。比如说我们使用的身份证的前六位是地区编号;7~14 位是身份证持有人的生日;不同城市电话号码的区号是不同的;你从手机号码的前三位就可以看出这个手机号隶属于哪一个运营商。而如果生成的 ID 可以被反解,那么从反解出来的信息中我们可以对 ID 来做验证,我们可以从中知道这个 ID 的生成时间,从哪个机房的发号器中生成的,为哪个业务服务的,对于问题的排查有一定的原创 2022-03-29 22:58:37 · 164 阅读 · 0 评论 -
写入数据量增加时,如何实现分库分表
我们学习了在高并发下数据库的一种优化方案:读写分离,它就是依靠主从复制的技术使得数据库实现了数据复制为多份,增强了抵抗大量并发读请求的能力,提升了数据库的查询性能的同时,也提升了数据的安全性。当某一个数据库节点,无论是主库还是从库发生故障时,我们还有其他的节点中存储着全量的数据,保证数据不会丢失。此时,你的电商系统的架构图变成了下面这样:这时,公司 CEO 突然传来一个好消息,运营推广持续带来了流量,你所设计的电商系统的订单量突破了五千万。订单数据都是单表存储的,你的压力倍增,因为无论是数据库的查询还是写入原创 2022-03-29 22:38:45 · 657 阅读 · 0 评论 -
数据库优化方案(一):查询请求增加时,如何做主从分离?
现在的架构图如下所示:此时,你的数据库还是单机部署,依据一些云厂商的 Benchmark 的结果,在 4 核 8G 的机器上运行 MySQL 5.7 时,大概可以支撑 500 的 TPS 和 10000 的 QPS。这时,运营负责人说正在准备双十一活动,并且公司层面会继续投入资金在全渠道进行推广,这无疑会引发查询量骤然增加的问题。那么今天,我们就一起来看看当查询请求增加时,应该如何做主从分离来解决问题。主从读写分离其实,大部分系统的访问模型是读多写少,读写请求量的差距可能达到几个数量级。这很好理解,刷朋友圈原创 2022-03-29 22:13:26 · 228 阅读 · 0 评论 -
系统怎样做到高可用
系统怎样做到高可用本节课,我会继续带你了解高并发系统设计的第二个目标——高可用性。你需要在本节课对提升系统可用性的思路和方法有一个直观的了解,这样,当后续对点讲解这些内容时,你能马上反应过来,你的系统在遇到可用性的问题时,也能参考这些方法进行优化。高可用性(High Availability,HA)是你在系统设计时经常会听到的一个名词,它指的是系统具备较高的无故障运行的能力。我们在很多开源组件的文档中看到的 HA 方案就是提升组件可用性,让系统免于宕机无法服务的方案。比如,你知道 Hadoop 1.0 中原创 2022-03-28 23:34:30 · 1767 阅读 · 0 评论 -
java中抽象类可以实现接口吗
抽象类可以实现接口这是一种思想,当你自己的类中有共用的方法的时候,就可以在抽象类中先进行实现,然后再用你的类继承这个抽象类,如果你直接用类实现接口,那是所有方法都必须实现的...原创 2021-03-20 13:52:25 · 1973 阅读 · 0 评论