前一段时间在网上看见了一篇文章内容大致是 作为一个架构师你需要拥有什么样的能力,其中不过是包括以下几个点:
1、对于Java基础技术体系(包括JVM、类装载机制、多线程并发、IO、网络)有一定的掌握和应用经验。
2、对面向对象的软件开发思想有清晰的认识、熟悉掌握常用的设计模式;
3、熟练掌握目前流行开源框架(spring/springmvc/ibatis),并且对其核心思想、实现原理有一定认知;
4、熟悉Oracle、MySQL等数据库开发与设计以及缓存系统REDIS或 Memcached的设计和研发;
5、熟悉底层中间件、分布式技术(包括缓存、消息系统、热部署、JMX等)
6、至少一种Java 应用服务器如tomcat
7、精通shell编程,熟练应用awk、sed、grep、strace、tcudump、gdb等常用命令;
8、有大型分布式、高并发、高负载(大数据量)、高可用性系统设计开发经验
9、对配置管理和敏捷研发模式有所了解
10、业务能力
当然以上的十点都是一个高级架构所应该掌握的或者说已经有拥有的能力,而就算我们知道架构师需要这样的能力了,其实离架构师的阶段还差很远,就像你高考的时候知道要考数理化,政史地。我们知道这些是考试的科目,而如何去得到这些东西或者去如何应对高考中的每个知识点,所以知道应该要掌握技术的方向之后当然就是去学习里面的具体知识;
下面我就以分布式架构这个专题来介绍下需要哪些具体的知识点,你又如何来获得这些知识点;
一,通信
既然是分布式系统,系统间通信的技术就不可避免的要掌握。
首先要掌握一些基础知识,例如网络通信协议(诸如TCP/UDP等等)、网络IO(Blocking-IO,NonBlocking-IO、Asyn-IO)、网卡(多队列等);更偏应用的层面,需要了解例如连接复用、序列化/反序列化、RPC、负载均衡等。
通信连接方式:
大量的连接通常会有两种方式:
1. 大量client连一个server
在现如今NonBlocking-IO这么成熟的情况下,一个支持大量client的server已经不那么难写了。
有一个点要特别注意,就是当server挂掉的时候,不能出现所有client都在一个时间点发起重连,那样基本就是灾难。
通常可以采用的方法是client重连前都做随机时间的sleep,另外就是重连的间隔采取避让算法。
二,伸缩性
分布式系统基本就意味着规模不小了,对于这类系统在设计的时候必须考虑伸缩性问题,架构图上画的任何一个点,如果请求量或者是数据量不断增大,怎么做到可以通过加机器的方式来解决,当然,这个过程也不用考虑无限大的场景,如果经历过从比较小到非常大规模的架构师,显然优势是不小的,同样也会是越来越稀缺的。
伸缩性的问题围绕着以下两种场景在解决:
1. 无状态场景
无状态场景通常会把很多状态放在db,当量到一定阶段后会需要引入服务化,去缓解对db连接数太多的情况。
2. 有状态场景
所谓状态其实就是数据,通常采用Sharding来实现伸缩性,Sharding有多种的实现方式,常见的有这么一些:
2.1 规则Sharding
2.2 一致性Hash
2.3Auto ShardingAuto Sharding的好处是基本上不用管数据搬迁,而且随着量上涨加机器就OK,但通常Auto Sharding的情况下对如何使用会有比较高的要求,
而这个通常也就会造成一些限制,这种方案例如HBase。
2.4CopyCopy这种常见于读远多于写的情况,实现起来又会有最终一致的方案和全局一致的方案,最终一致的多数可通过消息机制等,
全局一致的例如zookeeper/etcd之类的,既要全局一致又要做到很高的写支撑能力就很难实现了。
三,稳定性
作为分布式系统,必须要考虑清楚整个系统中任何一个点挂掉应该怎么处理(到了一定机器规模,每天挂掉一些机器很正常),同样主要还是分成了无状态和有状态:
1. 无状态场景 对于无状态场景,通常好办,只用节点发现的机制上具备心跳等检测机制就OK,经验上来说无非就是纯粹靠4层的检测对业务不太够,通常得做成7层的,当然,做成7层的就得处理好规模大了后的问题
2. 有状态场景全局一致类型的场景中,如果一台挂了,就通常意味着得有选举机制来决定其他机器哪台成为主,常见的例如基于paxos的实现。可维护性整个系统环境应该怎么搭建,部署,配套的维护工具、监控点、报警点、问题定位、问题处理策略等等。
四,可维护性
维护性是很容易被遗漏的部分,但对分布式系统来说其实是很重要的部分,例如整个系统环境应该怎么搭建,部署,配套的维护工具、监控点、报警点、问题定位、问题处理策略等等。
五,当然最重要的是下面的这些知识,你想要成为架构师 而又不知道如何下手 5-6-1-6-1-4-3-0-5 这是一个扣扣群 对于架构的知识我每天都会在群里免费更新一个知识点,如果觉得这些知识点能帮到你,我期待你的到来。
当然更细的知识点在下面的这个专题当中
[img][/img]
这些只是对于分布式专题需要掌握的知识,而整个架构师的大专题中我们是有六大板块的知识专题。全是干货。
分享到:
相关推荐
《人人都是架构师:分布式系统架构落地与瓶颈突破》是一本深入探讨IT系统架构的书籍,旨在帮助读者理解和掌握分布式系统的设计与优化。书中详细阐述了如何从传统的单体架构过渡到分布式架构,并解决在这一过程中可能...
分布式系统的分析和设计对架构师的要求更为严苛,不仅要精通传统应用架构,还需掌握特定于分布式应用的架构模式和算法设计。此外,数据库管理员、测试分析人员等角色也被要求具备更高的专业能力。 本书分为基础与...
《大规模分布式存储系统:原理解析与架构实战》是一本深度探讨分布式存储系统核心理论与实践的教程,专为架构师和技术爱好者量身打造。在当今数据爆炸的时代,大规模、高可用、高效率的存储解决方案成为了企业信息化...
总体来看,《凤凰架构:构建可靠的大型分布式系统》是一份详尽的技术指南,适合对分布式系统、微服务、容器技术等有兴趣的开发者和架构师。该文档不仅涉及了理论知识,还提供了实践案例和技术资源,是现代IT专业人员...
大数据时代下的分布式架构建模实践是一门综合性的技术,涉及了从数据采集、存储、处理到分析的全过程。...通过这些知识点的学习,可以更加全面地理解和掌握在大数据时代,分布式架构在商业建模中的应用及其带来的变革。
《大型分布式网站架构设计与实战》是一本专为架构师量身打造的指南,它深入探讨了在构建大规模、高并发、高可用的互联网应用时所面临的挑战和解决方案。本书内容丰富,涵盖了从理论到实践的诸多方面,旨在帮助读者...
JavaEE企业级分布式高级架构师培训课程主要涵盖了JavaEE技术栈在大型企业中的高级应用,旨在培养具备深厚理论基础和实战经验的分布式系统架构设计师。这个课程内容广泛且深入,通常包括以下几个核心知识点: 1. **...
《Java+项目实战+大型分布式+视频教程+架构师》是一套全面且深入的IT学习资源,涵盖了Java编程、实际项目开发、大型分布式系统构建以及高级架构设计等多个方面。这套教程旨在帮助Java开发者提升技能,从初级工程师...
首先,我们从“Java基础入门到架构师”的部分开始,这部分内容涵盖了Java编程的基础知识,包括语法、面向对象设计、异常处理等,这些都是构建分布式存储系统的基础。SSM(Spring、SpringMVC、MyBatis)和SSH(Struts...
这本书对于那些在技术道路上遇到瓶颈,渴望突破自我,向架构师角色迈进的程序员来说,是极具价值的学习资源。 分布式架构是现代企业级应用系统的重要组成部分,它通过将应用程序的不同组件分布在多个网络节点上,...
以上内容构成了Java分布式高级架构师学习的核心部分,通过这些技术的掌握,可以设计和实施高可用、高性能的分布式系统。在实际工作中,还需要结合具体业务需求,灵活运用这些知识,解决复杂的技术问题。
书中可能会涉及如何制定项目计划、管理团队、沟通协调等软技能,这些都是成功架构师不可或缺的部分。 最后,书中可能还会讨论架构评估和演进。随着业务的发展,架构也需要不断调整和优化。如何评价现有架构的优劣,...
本课程集成了多种关键知识点,旨在帮助在职Java工程师提升技能,迈向架构师之路。 首先,我们要关注的是“微服务”部分。微服务架构是一种将单一应用程序分解为一组小型独立服务的方法,每个服务都运行在其自己的...
以上知识点构成了互联网大型网站架构的核心部分,对于任何想要成为架构师的人来说,理解和掌握这些技术是至关重要的。通过阅读《人人都是架构师+分布式系统架构落地与瓶颈突破》这本书,读者可以深入学习这些概念,...
分布式架构与微服务平台是当今IT界的关键技术,也是资深软件工程师和系统架构师必须掌握的核心技术。本书以从传统分布式架构迁移到基于容器技术的微服务架构为主线,全面、透彻地介绍了与分布式架构及微服务相关的...
网站架构师必须知道的知识 一、大型网站演化过程中的网站架构扩展 * 初始阶段:一台服务器,后续增加缓冲服务器和分布式文件系统和分布式数据库系统。 * 对数据库进行主写从读的设计,使用 NoSQL 和搜索引擎技术。...
通过《软考-高级系统架构师真题》的练习,考生可以检验自己在这些领域的知识掌握程度,查漏补缺,提升实际操作和解决问题的能力。同时,真题的解答也能帮助考生理解和掌握考试的评分标准,从而提高应试技巧。在备考...
《大规模分布式系统架构与设计实战》是一本专为IT领域中的架构师们量身打造的实战指南。在当今数字化时代,随着互联网应用的飞速发展,处理海量数据和高并发请求的大规模分布式系统已经成为企业技术栈的核心部分。...
成为一名合格的架构师,需要掌握广泛的技术知识。这包括但不限于:编程语言(如Java、Python、C++等)、操作系统原理、数据库管理、网络协议、分布式系统、云计算、微服务、容器化技术等。同时,对新兴技术和趋势的...
11. **架构设计原则**:包括松耦合、高内聚、模块化设计、可扩展性、可维护性等,这些都是架构师在设计大型项目时需要考虑的关键因素。 12. **视频资源**:架构师视频可能涵盖了以上各个知识点的实际案例分析、最佳...