大家好,我是 Tom哥。
邢台县网站建设公司成都创新互联公司,邢台县网站设计制作,有大型网站制作公司丰富经验。已为邢台县数千家提供企业网站建设服务。企业网站搭建\成都外贸网站建设要多少钱,请找那个售后服务好的邢台县做网站的公司定做!
作为互联网从业者,高并发一直是我们绕不开的一个话题。
那么高并发系统都有哪些经验,掌握核心技巧,你可以快速成为一个架构师,主导一些高访问量系统的架构设计。
然后,升职加薪自然也就是水到渠成的事。
靠优化单台机器的内存、CPU、磁盘、网络带宽,使其发挥极致性能,已经不太现实。
正所谓 "双拳难敌四手,恶虎还怕群狼",现在早已经是分布式时代,靠的是shu量取胜,也称之为水平伸缩方案。
这么多的系统,如何流量调度,这里的第一道入口就是负载均衡。
负载均衡,它的职责是将网络请求 “均摊”到不同的机器上。避免集群中部分服务器压力过大,而另一些服务器比较空闲的情况。
通过负载均衡,可以让每台服务器获取到适合自己处理能力的负载。在为高负载服务器分流的同时,还可以避免资源浪费,一举两得。
对于一些大型系统,一般会采用 DNS+四层负载+七层负载的方式进行多层次负载均衡。
过去是一个大而全的系统,面对复杂的业务规则,我们采用分而治之的思想,通过SOA架构,将一个大的系统拆分成若干个微服务,粒度越来越小,称之为微服务架构。
每个微服务独立部署,服务和服务间采用轻量级的通信机制,如:标准的HTTP协议、或者私有的RPC协议。
市面常用微服务框架有:Spring Cloud 、Dubbo 、kubernetes、gRPC、Thrift 等。
这么多的微系统之间如何感知?这里面会引入注册中心。
常用的注册中心有:Zookeeper、etcd、Eureka、Nacos、Consul。
万事有利就有弊,分布式微服务由于拆分的过细,引入一些复杂化问题需要关注:
性能不够,缓存来凑。要想快速提升性能,缓存肯定少不了。
缓存能够带来性能的大幅提升,以 Memcache 为例,单台 Memcache 服务器简单的 key-value 查询能够达到 TPS 50000 以上;Redis性能数据是10W+ QPS。
为什么缓存的速度那么快?
从上图中发现,同机房两台服务器跑个来回,再从内存中顺序读取1M数据,共耗时0.75ms。如果从硬盘读取,做一次磁盘寻址需要10ms,再从磁盘里顺序读取1M数据需要30ms。可见,使用内存缓存性能上提高多个数量级,同时也能支持更高的并发量。
常见的缓存分为本地缓存和分布式缓存,区别在与是否要走网络通讯。
本地缓存是部署在应用服务器中,而我们应用服务器通常会部署多台,当数据更新时,我们不能确定哪台服务器本地中了缓存,更新或者删除所有服务器的缓存不是一个好的选择,所以我们通常会等待缓存过期。因此,这种缓存的有效期很短,通常为分钟或者秒级别,以避免返回前端脏数据。
相反,分布式缓存采用集群化管理,支持水平扩容,并提供客户端路由数据,数据一致性维护更好。虽然有不到 1ms 的网络开销,但比起其优势,这点损耗微不足道。
MySQL数据库采用B+数索引,三层结构,为了保证IO性能,一般建议单表存储 千万 条数据。
如果遇到单机数据库性能瓶颈,我们可以考虑分表。
分表又可以细分为 垂直分表 和 水平分表 两种形式。
数据表垂直拆分就是纵向地把一张表中的列拆分到多个表,表由“宽”变“窄”,简单来讲,就是将大表拆成多张小表,一般会遵循以下几个原则:
表结构维持不变,对数据行进行切分,将表中的某些行切分到一张表中,而另外的某些行又切分到其他的表中,也就是说拆分后数据集的并集等于拆分前的数据集。
Proxy模式。SQL 组合、数据库路由、执行结果合并等功能全部存放在一个代理服务中,业务方可以当做。
Client 模式。常见是 sharding-jdbc,业务端系统只需要引入一个jar包即可,按照规范配置路由规则。jar 中处理 SQL 组合、数据库路由、执行结果合并等相关功能。
1、如何选择分表键。
数据尽量均匀分布在不同表或库、跨库查询操作尽可能少、这个字段的值不会变。比如电商订单采用user_id。
2、分片策略。
根据范围分片、根据 hash 值分片、根据 hash 值及范围混合分片
3、如何编写业务代码。结合具体的业务实现。
4、历史数据迁移。
有一种说法:数据量大,就分表;并发高,就分库。
在实际的业务开发中,要做好数据量的增长预测,做好技术方案选型。另外,在引入分表方案后,要考虑数据倾斜问题,这个跟分表键有很大关系,避免数据分布不均衡影响系统性能。
并不是所有的调用都要走同步形式,对于时间要求不高、或者非核心逻辑,我们可以采用异步处理机制。
也就衍生出消息队列。
消息队列主要有三种角色:生产者、消息队列、消费者。
生产端核心的逻辑处理完后,会封装一个MQ消息,发送到消息队列。下游系统,如果关心这个事件,只需要订阅这个 topic ,便可以收到消息,进行后续的业务逻辑处理。
两者之间通过消息中间件完成了解耦,系统的扩展性非常高。
ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaQ,RocketMQ、Pulsar 等。
CDN 全称 (Content Delivery Network),内容分发网络。
目的是在现有的网络中增加一层网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,提高用户访问网站的响应速度。
CDN = 镜像(Mirror)+缓存(Cache)+整体负载均衡(GSLB)。
CDN都以缓存网站中的静态数据为主,如:CSS、JS、图片和静态页面等数据。用户从主站服务器中请求到动态内容后,再从CDN下载静态数据,从而加速网页数据内容的下载速度。
作为补充,像分布式文件系统、大数据、NoSQL、NewSQL,慢慢也开始成为高并发系统的周围框架生态补充。
当前标题:高并发设计,都有哪些技术方案?
文章出自:http://www.gawzjz.com/qtweb/news35/200785.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联