我终于深入参与了一个分布式系统了,好多想法不一样了!
- 格式:doc
- 大小:17.03 KB
- 文档页数:8
软件开发实习报告:分布式系统与高可用性设计一、引言在当今快速发展的互联网时代,分布式系统和高可用性设计已成为软件开发中不可忽视的重要概念。
本实习报告旨在总结我的实习经验,重点探讨分布式系统和高可用性设计的原理、挑战以及一些解决方案。
二、分布式系统的概述1. 什么是分布式系统?分布式系统是由多台计算机组成的网络系统,在这个系统中,各个计算机通过网络链接进行通信和协作,共同完成一项任务。
分布式系统的目标是通过提供并行计算、资源共享和容错等功能来满足用户需求。
2. 分布式系统的优势和挑战优势:- 高性能:分布式系统可以同时利用多台计算机的处理能力,加快任务的完成速度。
- 可扩展性:可以根据需求动态增加或减少计算机节点,实现系统的弹性扩展。
- 资源共享:分布式系统可以将不同节点的资源(如内存、存储)进行共享,提高资源利用效率。
挑战:- 通信和同步:各节点之间的通信和数据同步是分布式系统中的关键问题,需要解决网络延迟、数据一致性等挑战。
- 容错和恢复:分布式系统可能会面临节点故障、网络隔离等问题,需要保证系统的容错性和可恢复性。
- 负载均衡:在分布式系统中,需要合理分配任务和负载,确保各节点的工作均衡。
三、高可用性设计的原理1. 什么是高可用性?高可用性是指系统能够长时间持续地运行,不受故障、错误和恢复等问题的影响。
高可用性设计旨在提高系统的稳定性和可靠性,减少系统的停机时间和损失,满足用户对系统的可靠性要求。
2. 高可用性设计的核心原则- 冗余:通过增加冗余的节点或组件,实现系统的备份和容错。
当一个节点或组件失败时,可以立即切换到备用节点或组件,保证系统的连续性。
- 自动化:采用自动化工具和流程,降低人为错误的发生几率,提高系统的自动化管理和运维能力。
- 监控和预警:建立健全的监控系统,及时发现系统的异常情况并采取相应措施。
通过预警系统,提前感知到潜在的故障,防患于未然。
四、分布式系统与高可用性设计的应用案例1. 声明式配置管理声明式配置管理是分布式系统中的一种重要技术,通过将系统的配置信息以声明的方式进行管理,实现系统的可扩展性和灵活性。
深入了解计算机操作系统的分布式系统分布式系统是计算机操作系统中一个十分重要的概念,它在现代计算机系统中发挥着关键的作用。
深入了解分布式系统不仅能帮助我们更好地理解计算机操作系统的工作原理,还能为我们在实践中设计和实现高效可靠的分布式系统提供有益的指导。
本文将从分布式系统的定义、特点、架构以及应用等角度,深入探究计算机操作系统中的分布式系统。
一、定义分布式系统,顾名思义,就是由多个计算机节点组成的系统,这些节点通过网络进行通信和协作,共同完成一定的计算任务。
分布式系统的核心目标是将计算任务按照合适的策略分配给不同的节点,并通过消息传递等方式实现节点之间的协调和合作,最终达到提高计算效率、可靠性和扩展性的目的。
二、特点1. 分布性:分布式系统中的节点可以分布在不同的地理位置,可以是位于同一个局域网中的计算机,也可以是分布在全球各地的服务器。
这种分布性使得分布式系统能够通过就近调用和数据复制等策略提高计算效率和可用性。
2. 并发性:分布式系统中的节点可以同时执行不同的任务,并通过消息传递等方式进行通信和协调。
这种并发性使得分布式系统能够处理大量的并发请求,并提供高吞吐量和低延迟的服务。
3. 故障容忍性:由于分布式系统中的节点数量众多,节点之间可能存在网络故障、硬件故障等各种不可预测的问题。
为了保证系统的可靠性,分布式系统需要具备一定的故障容忍能力,例如冗余备份、错误检测和恢复等机制。
4. 可扩展性:分布式系统往往需要应对日益增长的数据和用户规模,因此具备良好的可扩展性是其重要特点之一。
通过增加计算节点和优化系统架构,分布式系统能够有效地应对规模的增长,保证系统的性能和可用性。
三、架构分布式系统的架构可以根据不同的需求和应用场景选择合适的设计模式和技术。
目前常见的分布式系统架构包括:1. 客户端-服务器架构:这是最常见的分布式系统架构,客户端通过网络连接到服务器进行请求和响应。
服务器负责处理客户端的请求,返回相应的结果。
分布式系统架构读后感读了关于分布式系统架构的相关书籍和资料后,真像是被带进了一个超级复杂又超级酷的科技迷宫。
以前我就觉得,一个系统嘛,就像一个小盒子,里面装着各种程序代码,安安稳稳地运行就好了。
但分布式系统架构一出现,就像把这个小盒子给拆成了无数个小碎片,然后再让这些碎片在一个超级大的网络空间里各自为政又协同合作。
这感觉就像是一群散兵游勇,最后却能组合成一支超级战队。
你看啊,在分布式系统里,各个节点就像一个个性格各异的小伙伴。
有的节点力气大(计算能力强),有的节点记性好(存储能力强)。
它们之间的通信就像是小伙伴们在互相喊话传递消息。
不过呢,这喊话可不像咱们平时聊天那么简单。
这里面有好多复杂的协议,就像是小伙伴们之间的暗语一样。
要是不懂这些暗语,节点之间就会变成鸡同鸭讲,整个系统就乱套了。
再说数据一致性这个事儿,那简直就是个让人头疼又特别有趣的问题。
比如说,在一个分布式存储系统里,就好像有好多本一模一样的账本(数据副本)。
如果一个节点在账本上记了一笔账(修改了数据),其他的账本也要同步修改,不然就会出现有的账本说我这里有100块,有的账本说只有50块的混乱局面。
这就需要一些超级智慧的方法,像什么Paxos算法之类的,感觉就像是一个神奇的魔法咒语,念对了就能让所有账本整整齐齐。
分布式系统的容错性也特别厉害。
就像一群小蚂蚁,即使有几只小蚂蚁不小心被踩死了(节点故障),整个蚁群(系统)还是能继续工作。
这是因为它的架构设计得很巧妙,每个部分都有备份或者替代方案。
这让我想到了变形金刚,一个小零件坏了,别的零件马上就能顶上来,然后继续威风凛凛地战斗。
不过呢,分布式系统架构也不是十全十美的。
它太复杂了,就像一个有无数个齿轮的大机器,只要一个小齿轮出了问题,就可能导致整个机器运转不畅。
而且,要让这么多节点好好合作,就需要大量的资源和精力去管理和维护。
这就好比是要组织一场超级大型的音乐会,每个乐手(节点)都得配合得恰到好处,指挥(系统管理员)可得费不少劲儿呢。
分布式系统架构读后感读完关于分布式系统架构的相关内容,就像打开了一扇通往超级复杂又超级有趣的技术世界的大门。
首先呢,感觉分布式系统就像是一群小伙伴一起干活。
以前那种单体架构就好比一个人独自包办所有事情,累得要死还容易出岔子。
而分布式系统里的各个组件就像有着不同技能的小伙伴,各自负责一块,比如有的专门管存储数据,就像那个记忆超群的小书呆;有的负责处理业务逻辑,像个精明能干的小管家。
在这个架构里,数据一致性就像是一场接力赛中的接力棒传递。
大家都得协调好,要是有个组件把数据弄乱了,就像接力赛里有人乱传棒,整个比赛就全乱套了。
不过呢,要保证这个一致性可不容易,得有各种巧妙的算法和协议,就像制定接力赛规则一样复杂。
容错性也是特别好玩的一个点。
分布式系统就像是一艘有着很多小隔舱的大船,即使某个隔舱漏水了(某个组件出故障了),船也不会沉(整个系统还能继续运行)。
这让我想到那些顽强的小蚂蚁,即使几只蚂蚁不小心被踩了,蚁群还是能继续有序地搬运食物。
再说说扩展性。
这就好比搭积木,刚开始可能是个小房子(小型系统),随着需求增长,要变成高楼大厦(大型系统),分布式系统架构就可以很方便地往上面加“积木块”(新的组件或者节点)。
但是这个过程也不是一帆风顺的,就像搭积木搭高了容易倒,扩展的时候也得小心翼翼,考虑各种平衡和兼容的问题。
总的来说,分布式系统架构这个领域充满了各种奇妙的想法和复杂的挑战。
它就像一个巨大的拼图,每一块(每个组件、算法、协议等)都得恰到好处地放在正确的位置上,才能拼凑出一个高效、稳定又强大的系统。
我感觉自己像是在探索一个神秘的宝藏岛,每发现一个关于分布式系统架构的新知识点,就像在岛上找到了一颗璀璨的宝石。
软件开发实习报告:分布式系统设计与开发的实践与反思经验分享1. 引言软件开发是现代社会中一项重要而且发展迅猛的行业。
在软件开发过程中,分布式系统设计与开发是其中一项关键技术。
本篇报告将分享我在软件开发实习中,参与分布式系统设计与开发的经验和反思。
2. 背景作为软件开发实习的一部分,我加入了一个小型创业公司,负责开发一个分布式系统用于处理大规模数据集。
这个系统需要支持高并发、可扩展性、容错性和一致性等特性。
3. 分布式系统设计与开发3.1 系统架构设计在分布式系统架构设计中,我们采用了微服务架构。
通过将整个系统划分为多个独立的服务模块,每个模块负责特定功能,减少了系统的耦合度,提高了系统的可扩展性和可维护性。
3.2 数据管理与存储在分布式系统中,数据管理与存储是一个重要的环节。
我们使用了分布式数据库,将数据分片存储在多个节点上,提高了系统的数据处理能力和容错性。
3.3 负载均衡为了实现高并发和可扩展性,我们引入了负载均衡机制。
通过将请求分发到不同的节点上,平衡了系统的负载,提高了系统的性能和可靠性。
3.4 消息队列在分布式系统中,消息队列是实现异步通信和削峰填谷的重要工具。
我们使用消息队列来解耦系统各个模块之间的依赖关系,提高了系统的响应速度和可扩展性。
4. 开发实践与经验分享4.1 协作与沟通在分布式系统设计与开发过程中,团队协作和沟通非常重要。
我们通过频繁的会议和沟通,明确每个人的职责和任务,及时解决问题,保证项目进度。
4.2 代码规范与质量编写高质量的代码是保证系统稳定性和可维护性的重要因素。
我们在开发过程中,注重代码规范和代码质量。
通过代码审查和单元测试,减少潜在的bug,提高了系统的稳定性。
4.3 异常处理与容错机制在分布式系统中,异常处理和容错机制是必不可少的。
我们通过合理设计系统架构和引入监控系统,及时发现异常并做出相应的处理,提高了系统的稳定性和容错性。
4.4 性能优化分布式系统的性能优化是一个复杂的过程。
浅谈分布式操作系统随着计算机技术的不断发展,分布式操作系统成为了越来越重要的领域。
这种操作系统将物理上分散的多个计算节点有机地结合在一起,形成了一个逻辑上统一的计算资源整体。
本文将围绕分布式操作系统的优势、发展历程以及未来挑战等方面进行深入探讨。
分布式操作系统的优势和特点主要表现在以下几个方面。
首先,资源共享是最基本的特点之一。
分布式操作系统可以将不同节点的计算资源进行统一管理和调度,使得这些资源能够被整个系统共享,提高了资源利用率。
其次,任务分配是分布式操作系统的核心优势之一。
系统可以根据需求将任务分配给不同的节点进行处理,从而实现负载均衡和并行计算,加快了任务处理速度。
最后,数据备份是分布式操作系统的重要特点之一。
系统可以将数据存储在不同的节点上,从而避免单点故障导致的数据丢失,保证了数据的安全性和可靠性。
分布式操作系统的发展历程可以分为三个阶段。
第一个阶段是分布式系统的起源。
20世纪60年代末期,为了解决大型机成本高昂、难以维护等问题,人们开始研究分布式系统。
第二个阶段是分布式系统的发展。
随着计算机技术的不断进步和应用场景的不断扩大,分布式系统得到了广泛应用。
第三个阶段是分布式操作系统的出现。
在20世纪90年代中期,随着网络技术的迅速发展和应用,分布式操作系统开始逐渐形成并得到了广泛应用。
分布式操作系统的出现得益于多种技术的不断发展和应用,比如网络技术、虚拟化技术、云计算技术等。
随着应用场景的不断扩大和需求的变化,分布式操作系统必将进一步发展。
未来的分布式操作系统可能会朝向更加智能化、自动化、安全化的方向发展,同时也会面临着许多挑战,比如如何更好地实现资源管理和调度,如何保证系统的安全性和可靠性等等。
综上所述,分布式操作系统已经成为计算机技术的重要发展方向之一。
它具有资源共享、任务分配、数据备份等优势和特点,可以广泛应用于各种场景中。
随着技术的不断发展和应用,分布式操作系统必将进一步发展并面临更多挑战。
分布式系统架构读后感读完关于分布式系统架构的那些事儿,我就感觉像走进了一个超级复杂又超级有趣的迷宫。
以前我就觉得,一个系统嘛,就像一个小盒子,所有东西都在里面规规矩矩地运行就得了。
可这分布式系统架构一出来,就完全打破了我的小盒子思维。
这就好比是一群小伙伴,以前都挤在一个小屋子里玩,现在呢,他们分散到了好多好多不同的小屋子,但还是要一起玩同一个游戏。
这个架构里的各个组件啊,就像是有着不同分工的小伙伴。
有的负责存储数据,那就是个超级大仓库保管员,啥数据都往它那儿放。
而且为了防止这个大仓库出问题,还得有备份的小仓库,这就像我们小时候藏零花钱,在好几个地方都藏一点,以防被妈妈发现全部没收了。
还有负责通信的组件,这就像是传话筒。
但是这个传话筒可不容易,得保证在不同屋子(不同的服务器或者节点)之间把消息准确无误地传来传去。
我就想啊,这要是人传话,估计传着传着就变味儿了,可这个通信组件得像个超级精确的机器人,一点儿都不能出错。
再说这个数据一致性的问题吧。
这就像是大家一起玩游戏,得保证每个人看到的游戏状态都是一样的。
要是有一个小伙伴看到的游戏画面和其他人不一样,那这游戏还怎么玩啊?所以呢,那些用来保证数据一致性的算法就像是游戏规则的守护者,时刻盯着,不让数据出现错乱。
而且啊,分布式系统架构还得考虑容错性。
这就好比小伙伴们玩耍的时候,难免有一两个不小心摔倒了(某个节点出故障了),但是整个游戏不能就这么停了呀。
得有办法让其他小伙伴接着玩,等摔倒的小伙伴爬起来(故障节点修复)了再重新加入。
这容错性的设计就像是一个应急小队,随时准备处理这些突发状况。
不过呢,这个分布式系统架构虽然复杂,但也有它超级厉害的地方。
就像一个超级战队,每个成员(组件)都发挥自己的力量,组合起来就能处理超级大量的数据,应对超级多的用户请求。
这要是用以前的那种单体架构,估计早就累趴下了。
总的来说,读完这个分布式系统架构啊,我就像打开了一个新的世界的大门。
第一篇、分布式系统设计总结系统设计总结分布式系统设计总结分布式系统简介说到分布式系统,首先要了解什么是分布式系统,分布式系统,就是组成于系统的硬件、软件存在于网络,相互之前只通过消息进行协作。
这里其实很好理解,有一个概念,叫大系统小做,就是把系统功能清晰的细分为很多小模块,每个模块都很容易实现,分而治之。
相互之间通过消息组件协作,其中消息组件也就是整个系统的关键了。
分布式系统有三个特征并行网络中的模块,各自运行,相互之间并行处理问题,通过消息进行协作。
他们之间的资源共享是非常重要。
容错任何系统都有可能出错,设计者的一个职责就是容错性。
分布式系统中随时都可能有系统错误,包括挂机,网络故障,失联。
而且一旦出现错误,其他模块可能不会立即感知。
透明分布式系统对于用户来说是透明的,这样能够方便的管理用户所需数据,处理好负载均衡,分布式另一个目标是将它的进程和资源实际分布在多台计算机上这一事实隐藏起来。
分布式系统的作用体现在它可以让多台服务器协同工作,完成单台服务器无法处理的任务,尤其是高并发或者大数据量的任务,同时能提供稳定可靠的服务。
分布式系统基本原则分布式系统遵循几个基本原则CAP原理分布式系统基础理论CAP为分布式的应用提供了理论基础。
CAP是CONSISTENCY、AVAILABILITY、TOLERANCE OF NETWORK PARTITION三个词组的简写,分别表示CCONSISTENCY,一致性;包括强一致性和弱一致性AAVAILABILITY,可用性(主要指的是快速获取数据的能力,即性能);PTOLERANCE OF NETWORK PARTITION,分区容错性(亦包括可分布性)CAP理论告诉我们,一个分布式系统不可能同时满足一致性,可用性和分区容错性这三个需求,三个要素中最多只能同时满足两点。
三者不可兼顾,此所谓鱼与熊掌不可兼得也。
而对于分布式数据系统而言,可分布性和分区容错性是基本要求,否则就不称其为分布式系统了。
分布式系统架构读后感读了关于分布式系统架构的内容,就像是打开了一扇通往超级复杂又超级酷的科技世界的大门。
我感觉这分布式系统就像是一群小伙伴在玩接力赛,但这个接力赛可复杂多了。
每个小伙伴(也就是各个节点)都有自己的任务,他们分散在不同的地方,就像在不同跑道上的选手。
可是这些小伙伴之间得互相配合得特别好,要是有一个出了岔子,就像接力棒掉了,那整个比赛(系统运行)就可能受到影响。
以前我以为一个系统就像一个大盒子,所有东西都在里面规规矩矩地待着。
但是分布式系统架构告诉我,不是这样的。
它更像是一群小盒子(节点),每个小盒子里都有点东西,然后它们通过各种神奇的“线”(网络通信之类的)连接起来。
这就有点像咱们的人体,各个器官(节点)都在自己的位置上干自己的活儿,但是又通过神经系统(网络)互相协作,让整个身体(系统)正常运转。
在分布式系统里,数据存储也很有趣。
就好比把宝藏(数据)分散着藏在好多小岛上(不同的存储节点),而不是放在一个大仓库里。
这样做虽然看起来有点麻烦,但是如果有海盗(故障或者攻击)来,损失的可能只是一两个小岛上的宝藏,不至于把所有宝贝都弄丢了。
不过这也带来了新的问题,就是怎么才能快速地在这些小岛上找到自己想要的宝藏呢?这就需要一些聪明的地图(索引和查询机制)啦。
说到一致性,那可真是个让人头疼又不得不佩服的事情。
比如说一群人商量事情,大家得最后达成一致的意见。
在分布式系统里也是,各个节点的数据得保持一致。
这就像一群朋友要决定去哪里吃饭,每个人心里都有个想法,最后得统一到一个餐厅去。
要是有的节点说去川菜馆,有的说去西餐厅,那整个系统就乱套了。
要实现这个一致性,就需要各种复杂的算法,就像大家商量的时候用的投票规则一样。
还有容错性这个特点,感觉就像是给系统穿上了一层厚厚的铠甲。
就像超级英雄,即使受了点伤(某个节点出故障),还能继续战斗(系统正常运行)。
这就依赖于系统能够快速发现哪个小伙伴(节点)“摔倒”了,然后让其他小伙伴顶上它的工作。
软件开发岗位实习报告:分布式系统与微服务架构实践总结一、引言在软件开发领域,分布式系统和微服务架构是目前最热门的技术趋势之一。
作为一名软件开发岗位实习生,我有幸参与了一个分布式系统和微服务架构实践项目。
在这个实习项目中,我深入学习了分布式系统的设计原理和微服务架构的实践方法,并将其应用到实际的项目中。
在本文中,我将总结我在实习期间的学习和实践经验。
二、分布式系统的设计原理1. 概念和特点分布式系统是由多个独立的计算机节点组成的系统,这些节点通过网络连接在一起,共同完成任务。
分布式系统具有以下特点:- 透明性:用户可以感知到整个分布式系统,而无需关心具体的节点和网络拓扑结构。
- 可靠性:分布式系统可以通过冗余和容错机制来提高系统的可靠性,即使某个节点发生故障也不会影响整个系统的运行。
- 可扩展性:分布式系统可以通过增加或减少节点来扩展或缩小系统的规模,以适应不同的业务需求。
- 数据一致性:分布式系统在数据更新时需要保持数据的一致性,可以通过事务处理和分布式共识算法来实现数据一致性。
2. 设计原则和模式在设计分布式系统时,需要考虑以下原则和模式:- 服务治理:通过注册中心和负载均衡等手段管理和调度各个节点,提升系统的可用性和性能。
- 数据分区:将数据按照一定规则分散存储在各个节点中,提高系统的并发性和吞吐量。
- 任务划分:将复杂的任务划分为独立的子任务,分别在不同的节点上执行,提高系统的并行性和效率。
- 异步消息传递:通过消息队列等机制实现节点之间的异步通信,降低节点间的耦合性和响应时间。
- 一致性协议:采用分布式共识算法来保证数据的一致性,如Paxos 和Raft算法等。
三、微服务架构的实践方法1. 概念和特点微服务架构是一种将软件系统拆分为若干个小型、独立可部署的服务的架构风格。
每个服务都独立运行在自己的进程中,并通过轻量级的通信机制进行相互通信。
微服务架构具有以下特点:- 独立性:每个微服务都可以独立开发、测试、部署和伸缩,更好地实现敏捷开发和持续集成。
我终于深入参与了一个分布式系统了,好多想法不一样了!
原文出处:Turbo Zhang 的博客前言
过去两个月深入的参与了一个分布式系统的开发,记得之前有人说过“想成为架构师之前,都是从微观架构开始的”。
尽
管我从没想过将来的某一天要成为一个架构师,或者领域专家,我只是想萌萌哒的编码,写着自己喜欢的Code,和一
群志同道合的朋友做出大家喜欢的商品和产品。
但是工作久了慢慢的搭架子的事情还是会来到你的面前,因为时间总会把一部分人慢慢推向海边,使得他们成为最早见到阳光的人。
不扯淡了,为什么要说阳光呢,还是因为过去的两(三)个月可能过的太充实也太痛苦了,完成之后,曙光来临的时候整个人是会发光的哦。
“深度”参与是因为我终于有机会在搭
架子的过程中有了话语权和选择权,同时也会承担70%以上的编码工作。
之前我的自我认知是我可能在软件方面的积累还可以,比如设计模式,架构分层,程序解耦,API入手等方面,但是总觉得我在硬件网络方面积累的太少,太薄了。
比如:
不同操纵系统之间的特点;
网络端口管理与分发;
哪些网络协议可以帮助我们更好的完成工作,监控虚拟机的时候是在虚机上加代理好还是用协议去控制;
硬件是否支持分布式,在扩展过程中对于.net C#的兼容怎么样;
什么时候使用多线程,在把线程交给程序调度的时候我们怎么控制和捕捉线程的异常;
日志系统对于整个分散的系统是多么的重要;
何时使用关系数据库,什么时候使用Nosql;
消息队列用擅长的MSMQ还是RabbitMQ.
怎样有效的和其他部门的同事沟通;
用什么样的方式去有效调度不同语言开发的系统;
测试用例对于大系统从零散到完整是多么的重要;
系统标准,代码原则对于后期的维护余扩展是多么的重要;等;
项目简介
首先项目详细内容不便多说,简答的说,就是为国内某大型厂商建立一套协调其自身搭建的私有云以及其购买的公有
云的一套系统。
说牛X一点就是:一套混合云系统。
使用Restful
这是在构建完整个系统最大的收获,之前使用web api的经验只是为电商系统的移动终端提供数据交互的接口,但是在这次项目之后发现Rest接口的不仅作为我们系统向外部系
统提供交互的方式,同时在一些开源工具其暴露出来的接口也是基于rest的,可见全世界的程序员对于json对于rest
有多么的喜爱;
为什么装上软件配置完成之后使用不了
之前的开发经验由于使用的都是微软的技术包括组建,工具。
但是在项目中使用一些开源工具之后,配置成功之后却总也跑不起来,同时由于开源工具已将Exception封装起来,我们很难知道具体是什么样的问题,有的时候调试好久还是跑不起来,很沮丧也很懊恼,结果最后发现是由于公司IT只是将常用的端口打开,其他的都干掉了,如果申请开放端口的话还要走流程,于是对于开发人员有时候有一台外网的开发虚拟机也是相当的有必要的。
使用RabbitMq
个人是非常的喜欢使用Mq的,之前做电商总喜欢在Application层下面放入一层Service,你可以不用但是总会
强迫症似的不去不写。
为什么不用Msmq呢,原因是有很多了,简单点就是rabbit要比Msmq的协议更加高级,支持的
处理功能也更加丰富,最重要的原因是Rabbit在开源语言使用上是占领先地位的,而且我们的系统又要嫁接太多的开源语言系统,最后只能适配他们喽。
之前知道Mq在企业系统间数据交互使用频繁,不但能有效的划分层次,解耦依赖,同时数据交互方式上也相当的便捷。
总会有消息没有被消费者使用,那我们就需要程序异步的去处理这个消息队列了。
Redis
系统中使用了三种数据存储,MySql,SqlServer,Redis,当然前两种适用于开源和C#,而Redis的使用则是为了那些总是难以找到有效关系和依赖的数据,比如之前只是知道Reids可以作为数据的存储,可以分布式,可以主从复制,但是在这次开发之后更真真的发现Reids或者Nosql对于一个数据规则难以掌握,数据量大的系统是多么的重要,因为有的时候一批的Json串过来之后,难以有效的挖出里面的关系与逻辑,索性就一次性将他们放入Redis中吧,使用时再反序列吧。
同时建立读写分离的原则,我们主要将读放在了Redis里面,写到了Mysql,并通过Mysql的触发器实现服务器段数据的主从复制同步。
日志系统
之前我们的单一系统的时候,比如只是简单的3层架构的话,我们通过Debug可以从头debug到数据库,每一步都是掌握在手底下,每一步都尽收眼底。
可是对于这一个层次太深,组建调用较多,同时又是多线程的系统来说,挖到雷的机会,时间,成本都是要考虑的。
于是有效的使用日志组件,有效的在代码中埋雷就显的尤为迫切和必要,能够更好的帮助我们找到问题所在。
组件式开发
之前的简单分层系统我们通过Svn或其他的代码管理工具,每次提交都可以Merge看的到,但是当系统庞杂同时系统独立性很强的时候,分组建,分模块开发就显得很重要。
因为不想浪费大家一起Merge的时间,我们习惯性每个人有自己的Branch每周2的时候提交代码,大家一起参与,这样减少了好多因为代码管理浪费的时间。
测试用例
之前小的系统使用测试用例基本就是装B用的,本来小小的系统整套流程脑子一想就可以知道怎么做啦,为什么还要浪费时间。
可是在这次开发中充分理解了测试用例的重要性。
比如我需要你给我提供多台服务器的监控数据包括CPU信息,IO信息,NEt信息等等,但是你还没有想到怎么样去抓
取虚拟信息,不能因为你的问题去影响其他人的进度的,最好的方式从使用者角度获知他希望使用什么样的数据,为其建立API,同时为API建立测试用例并保证测试稳定。
而后期我有了监控虚机的方式之后我在建立对应的适配方法适
配到对应的API上。
所以首先肯定要保证API的稳定,因为他之上的东西已经稳定了吗,你只好辛苦啦,有效的测试用例可以帮助我们更好的剥离项目逻辑与协调组件系统。
编码原则
这个主要是每周有时间大家一起参与Code Review,由于开发人员的能力不同资历不同,所以总会在代码的编写上和建立出现太多的不统一。
比如命名啦,变量声明啦,有的时候会发现刚毕业的小朋友会将好多的私有变量放在类的顶部,同时一个类里写太多的方法,而且有的方法好长,还没有注释。
于是有的时候你想了解一个方法的真正含义,要鼠标各种滚动,到变量声明去了解真正用途,好烦的。
有的时候代码的职责不明确,总是瀑布的思想方式去写代码,比如我们两个功能:一个是发送API请求建立虚拟机,另一个是在虚拟机建立成功时候将操作Log写入db。
他们习惯
性的将写DB的逻辑放在了发送HTTPRequst的方法里面,这完全是两个逻辑。
另一个问题是由于创建虚拟机是需要时间的,同时尽管虚拟机操作成功有可能你写DB的时候网络
原因DB失败了。
我认为这应该是个原子的操作,两者的状态必须统一,就像是你在手机充值的时候显示银行卡扣金额成功,可是手机充值是出现问题,钱不是白花了吗。
所以在这些有特殊逻辑的地方要建立特殊的统一的机制,不能每个人有各自的实现。
之后就是沟通了
由于项目涉及到多个项目组,我们并不是同一个部门,相互也不熟悉,所以沟通上就会有一些需要注意的。
首先要了解“对手”,主要是因为如果对方是个技术高手,你不能像个白
痴小孩,要有所准备,最起码知道他们用什么开发语言,他们需要关注的业务逻辑,等等,不能让他们得到你是个菜鸟的结论。
由于口头的好多东西可能是没有经过检验的东西,所以前几次达成的协议我们只是做个参考,需要多次沟通之后才能确定结果,比如我们的项目中我们需要和Python组Java组协调消息接口,消息格式的时候。
你要知道协调RabbitMQ时候我们需要定义下交互的Exchange,queue name 或者RoteKey等等,同时由于消息格式比较大,需要定义一些关键字或者预设字段的话,需要发邮件进行确认与沟通,避免开发过程中产生误会影响完成的功能返工。
总之这次搭架子的过程收获很多,一时半会也不能想的全面,
以后慢慢聊,由于是第一次资历尚浅,好多的技术选型,问题考虑可能不成熟,也希望大家知道更多的能够纠错指导。
下面就说一些我们在架构中使用的一些东西:
开发语言:C#,java,Python;
数据存储:缓存,文件(xml),MSsql,Mysql,Redis;
数据交互:rest,json,RabbitMq;
操作系统:ubuntu,windows;
虚拟机监控:zabbix;
搜索:solr;
多线程,多层架构,模块式开发,组件式开发;
赞
2 收藏
3 评论。