前几天,在我们的技术交流群里看到有小伙伴问:有没有练手搭建Redis集群的方式推荐:
不禁让我想到,对于各种集群和分布式基础设施的搭建,其实是每个开发者进阶时候都要经历的一个成长过程。但是,这里对于不少开发者来说,却又面临着一个现实问题:我没有足够的资源(主机或配置)去尝试和练习。
最近,DD刚好看到阿里云有个可以免费领机器的活动,还挺适合正在学习这方面技术内容的小伙伴来领取做练手资源的。
#如何领取
这个免费领机器的机会,其实是阿里云ECS面向学生和个人开发者的免费试用活动。它的规则是每个月提供280元的抵扣额度(实例部分200元,公网流量80元),在此额度内,可在5个地域试用1-4台。
划重点!!!这次的免费试用跟以前不一样了,是可以领多台的!
所以,我们只需要在免费额度之内,选择尽可能多的机器,就能满足我们练习搭建各种集群的需求了。
领取入口:https://click.aliyun.com/m/1000380445/open in new window
进入免费试用页面之后,按如图操作:
当然了,如果你不是想要搭建集群练手的话,也可以选择其他配置,只要符合控制每个月ECS的费用在200元、公网费用80元以内,就可以免费使用。
另外,这里告诉大家一个小秘籍:那就是不用的时候开启停机模式!!!能省则省,榨干每一分额度 ^_^
#练手推荐
如果您还是学生,或者平时参与的项目架构没那么复杂,不知道现阶段有哪些东西可以去学习,或者不知道应该按什么顺序去练手。那么,DD这里给大家一些建议,您可以跟着我下面的思路来尝试一下,这些内容都是后端开发推荐掌握的必备技能。
下面推荐的内容,我将以一个应用演进式发展的角度,来给大家梳理要学习的内容顺序,也让大家了解到每个技术的基本应用场景和引入时机。大家可以根据自己的情况选择性的去选择内容练手。
#从0到1阶段
通常来说,从0到1阶段,作为一个初创应用,没有什么处理上的压力,所以往往架构是非常简单的。一台服务器 + 一台数据库,基本就搞定了。如果你从来没有过这个体验,那么可以尝试一下下面的部署架构:
- 一台机器搭建Nginx
- 两台台机器部署应用(双实例)
- 一台机器部署数据库。
这里一个关键点在于Nginx的负载均衡配置,实现一个基础且有一定高可用雏形的部署架构。得益于两台服务器部署应用,又有Nginx做负载均衡,还能实现滚动发布,上线升级不影响用户使用。
#从1到100阶段
如果发展顺利,用户增长还不错,那么你们在做的产品需要进一波推广了。此时往往会碰到两个问题:
一个是应用服务器的负载增大,需要扩容应对更多请求。这个可以通过增加应用部署,配合Nginx负载均衡来扩容,如果你没有像从0到1阶段的那种结构来部署的话,这个时候这一步就一定要补上了。
其次,影响性能处理最大的瓶颈大概率出现在数据库。所以,很多时候,我们将在这个阶段引入数据库的一些高级用法,比如:
- 一主多从集群open in new window:通过一主多从结构,实现读写分离,用更多的机器来分摊数据库的负载。
- 多主多从集群open in new window:通过多主多从结构,将业务数据分库处理。配合一些分库框架和中间件,实现更大量级的数据存储需求。
#从100到10000阶段
随着业务的继续加速发展,数据访问层面的压力会越来越大。这个时候,我们往往都会开始引入缓存系统,来加速用户请求的响应。减少热点数据频繁的访问数据库,减少数据库的负载。所以,这个时候Redis往往就要登场了。缓存作为一个重要中间件,在上线的时候集群化部署肯定是需要的,所以下面这些,也建议大家可以尝试一下:
- 主从模式open in new window:主从模式是Redis三种集群模式中最简单的,在主从复制中,数据库分为两类:主数据库(master)和从数据库(slave)。其中,主从复制有如下特点:
- 哨兵模式open in new window:主从模式的弊端就是不具备高可用性,当master挂掉以后,Redis将不能再对外提供写入操作,因此sentinel模式应运而生。sentinel中文含义为哨兵,顾名思义,它的作用就是监控redis集群的运行状况,此模式具有如下一些特点:
- 集群模式open in new window:Redis的哨兵模式基本已经可以实现高可用,读写分离 ,但是在这种模式下每台 Redis 服务器都存储相同的数据,很浪费内存,所以在 redis3.0上加入了Cluster 集群模式,实现了 Redis 的分布式存储,也就是说每台 Redis 节点上存储不同的内容。下面是Cluster 集群模式的一些特点:
#野蛮发展阶段
接下来,如果业务发展一切顺利。这个时候,数据越来越多,业务需求也越来越多,参与的开发人员也越来越多。这个时候,上面的架构已经很难满足各类需求的快速迭代。于是又将引入各种有用的东西。所以,下面的东西也一样推荐掌握。
数据异构
现在的数据库世界,是一个百花齐放的阶段。没有一个数据库可以完美的解决所有问题,所以随着业务的发展,我们往往都需要引入各种不同的数据库来解决不同的业务需求。比如:引入Elasticsearch来解决搜索,引入InfluxDB解决时序类的统计等等。所以,对这方面感兴趣的话,可以尝试一下:
基础设施
随着团队的壮大,服务和系统越来越多。运维压力就会很大,所以一些分布式、微服务治理的工具也都可以引入来简化开发和运维。对这方面感兴趣的读者,也可以玩一下下面的搭建:
随着服务和系统的增多,它们之间的通信有不少场景是不需要同步实现的。很多时候,系统间通过异步来实现会更加可靠。所以,消息中间件的引入也是必须的。目前最常用的有下面这些,如果您没有练过手,也是非常推荐要掌握一下的: