架构
文章平均质量分 66
西直门三太子
知是行之始,行是知之成
展开
-
Reactor网络模型
4.handler不负责业务处理,业务交给子线程去处理后再将结果返回到handler中,handler通过send返回。2.subReactor子进程将收到的连接加入连接队列进行监听,并创建对应的handler来处理后续事件。2.如果是连接建立事件则交给Acceptor处理,建立handler来处理后续的连接事件。2.如果是建立连接事件则交给Acceptor处理,建立handler来处理后续的连接事件。1.由于线程处理后的数据要通过Reactor返回,所以涉及到线程数据的访问和共享。原创 2022-10-13 10:16:38 · 418 阅读 · 0 评论 -
Redis做缓存需要防范的问题
特殊情况:爬虫来爬你的数据,一页一页爬到底,从数据库中生成缓存比较耗费性能(order by,limit),会拖慢数据库。一般会对前几页做缓存,其它页读取时再做缓存,这足以应对大部分的情况。1.缓存刚好失效(生成缓存的时间越耗时,出现的几率就越大),这时候大量数据进入,可能拖垮数据库(极端)。一.加锁,只允许一个线程去查询数据并更新缓存,其它请求返回默认值或等待缓存更新后查询缓存。在高并发的场景下,缓存失效,导致大量数据访问数据库,导致数据库性能急剧下降或崩溃。将数据放入内存中,一次生成,多次使用。原创 2022-10-03 17:27:13 · 496 阅读 · 0 评论 -
NoSQL
提供了丰富的数据结构:string,hash,list,set,sorted set,bitmap,hyperfloglog等。文档型数据库一般使用JSON或者BSON格式,格式是自描述的,无需使用前定义字段。3.IO问题,由于是行式数据库,就算获取某一列数据也会读取一行。2.Schema扩展不方便,那我有文档数据库:MongoDB…4.你全文搜索弱,我有全文搜索引擎Elasticsearch。1.行结构(行式数据库),无法存储数据结构(比如链表)3.只获取某一列,我有列式数据库:HBase。原创 2022-10-02 19:24:03 · 706 阅读 · 0 评论 -
数据库存储高性能
比如说商品有商品详情,是富文本(可能使用text这种比较大的类型存储),我们生成订单时查询订单信息,不需要富文本,如果将其分到其它表中,那么订单表的数据变小,导致检索变快。通常使用 user_id % 基数(表数量,这里假设10张表),那么id=1的用户进user_1,id=2的用户进user_2。而是按照user_19的表数据拷贝user_9的数据(其余新增的表都按照这种方式)。小明注册(写入主库),然后去登录(读取从库),由于延迟,从库没有小明导致登录失败。1.读写分离,一般一主n从(n>=1)。原创 2022-10-02 13:13:22 · 651 阅读 · 0 评论 -
架构设计流程
还有可能出现一种极端的情况:解决完复杂度1,解决复杂度2发现,不推翻复杂度1的解决方案无法解决复杂度2。但这现实中很少遇到,因为一个复杂度的解决方案有多种,选一种不用推翻复杂度1的解决方案即可。就算倒霉要推翻复杂度1的方案,那么新的方案要同时能够解决复杂度1和复杂度2。复杂度之间可能会有冲突,比如要求可用性,那么数据要写入磁盘,而磁盘写入会影响系统性能,要进行一定的取舍。应该从多个维度进行评估(如:性能,可用性,成本,研发周期,可扩展,复杂度等出发)什么简单原则,合适原则,演进原则全丢(这样是不对的)原创 2022-09-29 16:23:12 · 1160 阅读 · 0 评论 -
架构设计原则
架构设计的难点在于不确定性,比如:1.我是选择比较成熟的技术(后续演进怎么办),还是选择最新的技术(出问题怎么办)2.我是选择mysql(比较熟悉),还是mongodb(可能更适合业务)3.选择React(灵活),还是vue(易用)4.我是做电商,能否照搬淘宝京东那一套?1.合适比领先更重要,如果你是做电商的,淘宝架构虽然领先,但并不一定适合你当前的业务2.一个好的架构是在业务的实践中,不断进行演进的,脱离业务的架构都是刷流氓。原创 2022-09-24 15:30:35 · 321 阅读 · 0 评论 -
什么是架构
还有可能优化了A点,不经意造成B点的性能下降(可能变成负优化)。当前对DDOS攻击(耗尽出口带宽)没有什么比较好的方法,主要还是依靠运营商强大的带宽和流量清洗能力。1.提供了组件的开发规范,比如为laravel开发组件,就要遵循其发布包的规范。对高性能的追求会带来复杂度,分为单机复杂度,和集群复杂度,任务分解复杂度。1.单个服务变得简单,影响性能的点变少,更容易进行针对性优化。对低成本的追求并不是架构的首要目标,而是作为架构的附带约束。指的是相同的数据,经过不同的服务器处理后,结果是相同的。原创 2022-09-21 14:04:04 · 4838 阅读 · 0 评论 -
高可用状态决策方式
就是分配器要知道哪些服务器是可用的(服务器上报自身健康状态)。等下次请求过来,通过分配器,让其到达可用的服务器上。虽然降低了误判(网络波动等),但是又引入了新的问题。但是如果1,2,3是真的故障了。4,5到达不了总机的1/2,导致无法决策。假设1断掉,2,3 传输的数据不一致,以谁的为准?看脑裂那张图,这样虽然解决脑裂下的双主问题。备机无法确认主机是否故障(可能是网络波动)1.主机未故障,备机认为主机故障,出现双主。2.主机故障,备急认为未故障,则无主。民主型,备机将意见反馈给主机。原创 2022-09-20 12:43:02 · 218 阅读 · 0 评论 -
系统的组成
由多个个体按照某种规则运作,完成个体不能单独完成工作的群体。某种规则,可以理解为交互。完成个体不能单独完成的工作。理解为功能上 1+1 大于 2。电商系统都有订单,和支付,物流等。如果他们之间不进行交互联动。单纯的订单是无法满足人们购物的需求。理解为更大的系统的组成部分(系统)。比如我们的商城系统由面辅料商城 + 个人定制商城组成。那么可以理解为面辅料商城,个人定制商城是电商的子系统。原创 2022-09-19 17:08:44 · 604 阅读 · 0 评论 -
通过nginx日志分析网站QPS
文章目录前言查找最高的10个QPS查找最低的10个QPS查找QPS最高的10个及其接口地址查找QPS最低的10个及其接口地址统计指定接口的QPS前言通过分析nginx的 access.log 来分析QPS其中每一条都是这种格式> 111.37.176.163 - - [02/May/2022:12:20:23 +0800] "GET /api/dyTag_test/tag HTTP/1.1" 404 6622 "-" "jianpian-android/350"我只要像sql语句一样原创 2022-05-02 18:27:36 · 2618 阅读 · 0 评论 -
Redis大规模集群解决方案
文章目录Redis怎么支持大量数据Redis Cluster 为啥不适合做超大规模集群怎么构建超大规模Redis集群Redis怎么支持大量数据Redis cluster 构建集群,进行分片。将数据分到不同分片上分片保证高可用采用主从模式 由多台Redis 组成分片Redis引入槽(slot),集群固定16384(16*1024)数据落入或读取时对其key进行hash运算得到槽值,通过查找本身维护的元数据(槽值,节点位置映射) 获得槽所在节点如果本身是当前节点直接操作,否则返回给客户端重新定位到具原创 2022-03-11 10:30:06 · 1493 阅读 · 0 评论