- 浏览: 239295 次
- 性别:
- 来自: 北京
-
最新评论
-
_xiong_mao_1:
又很好的理解了一个概念,谢谢博主!
[转]JNDI的一篇文章 -
驭乐MJ:
很好!学习了!
[转]JNDI的一篇文章 -
u012566958:
mark
同步和异步 -
xiaoyao3857:
这个倒有些启发,不过博主如果能说明为什么上面的程序运行结果是那 ...
java多线程复习 -
xiangjun_yu:
顶mark
Log4j输出格式控制
原文的地址:
http://www.infoq.com/cn/articles/chengli-arch-agile-soa
据支付宝公司官方数据,截止到2008年5月6 日,使用支付宝的全球用户已经超过8000万,支付宝每日交易总额超过3.5亿人民币,日交易笔数超过150万笔。看到这儿,我想很多软件开发者朋友可能会问的问题是:这么庞大的支付平台是谁设计的,如何设计的,有什么经验和教训?在2008年5月份阿里巴巴举办的第二届网络工程师侠客行大会上,InfoQ中文站有幸认识了支付宝首席架构师程立先生,并邀请其分享了软件架构设计心得,对当前热门技术的看法,以及在自己团队中对这些热门技术的实践经验等。
nfoQ中文站:请给InfoQ中文站的读者介绍一下您自己。
程立:InfoQ中文站的读者,大家好,我叫程立,来自支付宝架构团队。和大家一样,我也是InfoQ的忠实读者。从2004年起,我开始参与淘宝网与支付宝系统的建设,并于2005年正式加入支付宝,此后一直从事支付宝系统的研发工作。现阶段,我的兴趣在于适合电子支付行业的敏捷、高可用、可伸缩的面向服务架构与开放架构。非常高兴InfoQ中文站提供了这样的机会,让我能够代表支付宝的工程技术人员和大家进行交流,希望这样的交流能增进我们的相互了解。
InfoQ中文站:支付宝技术架构的发展过程是什么样的?
程立:三年多前的支付宝系统只有一个应用程序,而今天,仅仅在你点击支付宝支付按钮的一瞬间,取决于你选择支付方式,很可能调动了数十个独立的系统同时为你提供服务:有的帮你联系银行,有的帮你支付货款,有的推进你的交易,有的帮你联系商家发货,有的警惕地盯着这一切,为这个过程保驾护航……支付宝系统从一个朴素的轻量级Java应用程序,发展到现在由很多自主的服务系统构成的全分布式系统,是一个朝着明确的方向、迈着小而快的步伐、与业务齐肩并进的发展过程。这个过程大致分为两个大的阶段。
第一阶段是基于良好的业务边界,将一根粗烟囱似的应用程序拆成若干个细一些的烟囱。这种切分方式,可以使应用程序间的通信尽量小,只有少量的页面跳转与组合,以及基于JMS的异步消息交换。这种简单的分布就带来一些相当直接的好处,如单个系统的复杂性降低了,研发的并行度提高了,每个系统可以单独进行伸缩。公共的业务,比如账务与交易的处理等,被实现成可共享的类库,打包在每一个应用程序中,这样,可以仍然使用单数据源上简单、低成本的本地事务来保证业务处理所要求的原子性、一致性、隔离性与持久性。在这个阶段,新业务只要是自成体系的,都尽量作为单独的应用程序实现。
在第二阶段,为了使业务核心更加专业化,前端应用能够轻装上阵,我们将原来类库形式的业务核心一个接一个地拿出来,做成了自主的服务系统。这是一个充满业务与技术挑战的过程。仅从技术架构上说,为了使服务能够快速构建、灵活扩展,我们研发了组件式平台,使服务自身能够通过插件式体系进行灵活扩展;为了提供电子支付业务所要求的严格事务一致性、快速响应与高并发处理能力,发展了分布式服务系统中事务协调技术;我们也发展了企业服务总线技术,以提供统一、易于功能扩展、满足各种服务质量要求与集成模式的服务通信机制。每个服务系统连同它操作的数据都是一个自主的业务单元、系统单元与研发单元,很好地支持了业务模型创新、系统伸缩、研发组织小型化与专业化。
总体说来,虽然发展速度较快,但支付宝的技术架构仍然处于一个布局与打基础的阶段,对技术高度重视的态度,和紧紧抓住“服务”不放、持续小步快跑的执行策略,使我们在这个阶段打下了一个良好的发展基础。面对前方业务发展的巨大空间,架构与技术大有用武之地,在这里欢迎有志之士加入我们,共同开拓未来。
InfoQ中文站:请谈一谈您对架构的认识。
程立:老子说“道生一、一生二、二生三、三生万物”。在业务愿景的技术实现过程中,假设“道”为愿景、一为方向、二为战略的话,三就应该是架构了,架构既出,万物化生可矣。战略是整体的、长期的,让架构直接承接战略,带来的最大好处是可以得到一个整体的可持续发展的系统平台。而如果只是让架构从属于项目或者产品,很可能产生的系统也是烟囱型的,短视的。
这是支付宝公司内部对架构的定位。作为技术人员,常常遇到的问题是“提供一个X产品,它的流程为Y,高峰期处理量达到Z。”;也有一些问题的提法有所不同,比如“我们希望进入X市场,Y是我们的主要价值点,这个市场未来三年可能有Z倍的增长,系统能帮我们做什么?”。在我所在的团队中,第二类问题总是由架构师出马,而第一类问题,只要X、Y、Z不太离谱,基本不需要架构师操心。当然,如果现有架构难以支撑这个需求的话,那架构师也是责无旁贷的。
InfoQ中文站:一个成功的架构应该具备什么特点?
程立:架构必须能够达到功能与质量要求,以合理的研发、运行与管理成本产生使客户满意的系统,这是一个基本要素,否则是不及格的。但仅仅满足功能与质量要求的架构,还谈不上成功。
在长距离赛跑中,能够让系统以轻松的步伐始终跑在业务前面,是成功架构的一个显著特点。为了支持这几年业务的快速发展,支付宝的每个重要子系统都历经了若干个大的版本升级。这些升级有些是沿着事先规划好的迭代式发展路线进行的,在保持整体架构稳定的情况下,通过增加功能、扩展数据模型、引入新的处理模式、不断地扩展着功能与性能,持续给予业务强劲的支撑;但也有一些系统的升级则是接近于返工,架构重新设计、代码重写、数据模型重新设计、已有数据大迁移。路遥知马力,虽然这些系统在上线的当时都达到了功能与质量要求,但时间可以判定架构成功与否。
成功架构的另一个显著特点是能够对公司的核心竞争力形成有力的支撑。最近,马云先生在一次公开演讲中,举了一个例子,沃尔玛要增加一万个买家,需要买面积巨大的地,需要买很多的设备,需要很多的仓储;而淘宝只需要增加一台电脑就可以了。这个优势是商业模式带来的,但其背后,是需要有一个高度可伸缩的技术架构来支撑的。
InfoQ中文站:如何最大限度避免一个架构设计的失败?
程立:首先说点外因,架构设计的失败不全是架构师的责任。假如一个企业战略不清,或者虽然定义了清晰的战略,但没有很好的沟通机制让架构师了解战略,很难设计出全局上下一盘棋、富有生命力的架构。当发现看不清全局、看不清未来时,架构师应该设法多沟通、推动改进。如果始终推而不进、沟而不通,就该考虑换个舞台去发展了。不过,对于处于创业期的企业,这一条不大适用,这类企业中,架构发展与业务发展在开始阶段往往是一个快速犯错、快速调整的试错过程,这样的企业走向成功的同时,也常常能够培养出好的架构师。
在做架构设计时必须以业务为本。不是说让架构师去抠业务的枝节,比如流程中的某个环节究竟应该有几个分支、或者某个业务参数应该是多少,而是将精力放在理解业务本质,看清不同业务之间的关系上。在一个业务思想混乱的头脑中产生的系统也一定是结构模糊、行为混乱的。
业务清晰之后,架构师就像导演读透了剧本,可以在脑海中构思与创作了。拟定时空结构、选择风格样式、物色演员、规划每一幕的内容以及幕与幕之间的衔接等等。待一切可以在头脑中栩栩如生、流畅地上演之后,架构其实就出来了。这一步工作做得是好是坏,主要取决于架构师长期以来积累的能力、知识与素养,没有太多的捷径。
有几个算不上新鲜的经验还是值得提一下。首先,架构师要建立自己的QA工具,比如一个质量检查表,能够全方位地从研发、运行、管理等维度,对架构的质量属性进行客观地评估,这个检查表中各项指标的值范围与权重需要针对实际情况进行个性化定制。到了一个新环境中的架构师往往需要一个适应期,在这个适应期中除了熟悉新公司的现有业务与系统之外,很重要的一个工作就是调整原来的质量评估体系,使之新公司的业务相匹配。其次,在架构师头脑中的虚拟舞台上,演员是一个个系统,对每种系统的能力与特性的理解会决定他构思出来的剧情在真实上演时能在多大程度上符合期望,这需要在实践中关注并积累,如果引入了全新的演员,一定得让他试镜。还有一个是习惯问题:不要把脑海中出现的第一个设计当作最终版本,只要时间允许,要多创作几个版本,其间多与同事讨论、做些换换脑筋的事,避免陷于某种定式跳不出来。这需要架构师养成习惯,也需要公司研发流程的支持,比如让架构师尽量早地介入项目,有充分的时间酝酿与斟酌。
最后,架构设计不可能不犯错,因此很重要一点是当发现架构设计有错误时,一定不要尝试掩盖或者固执地坚持自己的错误,调整得越早,付出的代价就越低。好的企业一定有一个非常宽容的氛围、允许犯错并且鼓励及时改正。我曾经有过几次在开发已经进行到三分之一甚至更久时,发现架构设计有严重缺陷的经历,由于及时调整,加上团队的理解与配合,最终项目仍然取得成功,因此对这一点感受很深。
InfoQ中文站:在支付宝的技术团队中,也采用了敏捷的方法,请谈谈这方面的经验。
程立:支付宝的研发体系是从自身实际出发制定的,既要保障产品的高品质,又要保持对业务变化的快速响应,加上协调多个团队高度并行开发的需要,整套研发体系是一个精心设计的严谨结构,也是比较重量型的。但我们还是可以从中找到敏捷方法中的一些重要元素。
首先谈谈迭代。这里,以我所熟悉的支付宝架构团队的研发模式举一些例子。之前提到,支付宝技术架构是采用与业务发展齐肩并进的策略,这个过程就像给 F1比赛中的赛车换轮胎,所有架构改进的实施必须安全、快速,尽量不打断正常的产品研发的节奏。因此,在确定技术架构的基本发展方向或者基础设施产品的蓝图之后,我们会将研发工作切分成很短的迭代,每一个迭代的目标明确,一般只解决少数几个技术问题。
以引入企业服务总线为例,第一个迭代的任务是调研,目标是概念验证与产品选型;第二个迭代是试水,我们选择了一个新的业务产品作为服务总线应用的小白鼠,当时的目标是解决高可用部署模式问题、以及集成逻辑的统一管理问题,架构师进入到该项目中,通过服务总线提供该产品与其它系统的集成方案,这个迭代与新产品发布的同时完成;以后的迭代是一系列推广使用的迭代,几次之后,我们完全替换了原来不够灵活的商用JMS服务器集群,并且整个技术团队可以不依赖架构组使用服务总线了;再以后的迭代是服务总线的自身的改进,如QoS的改进、服务治理功能的增加等等。采用这种方式,每一次迭代都有实际可运行的产出,并且其结果可以作为选择下一轮迭代目标的依据。以这种模式,架构发展以一种稳健的方式小步快跑着。但与有些敏捷方法学建议的固定迭代时长有些不同,当“搭顺风车”时,是宿主项目的规模决定迭代的时长。
保证高效的沟通是另一个重要的问题,这通常是采用我们俗称为“闭关”的形式来解决的。项目上到一定规模,就会包下一个会议室,项目经理、架构、系分、开发、测试等人员都会坐在一起,保持沟通的高效率,也减少不必要的干扰。对于长周期的项目、或者需求难以在初期完全确定时,在一个项目内部也设计一些迭代,开发人员增量地交付功能,测试并行进行功能验证,畅通无阻的沟通以及项目经理在场的协调管理是这种工作模式能够顺畅运转的关键。
InfoQ中文站:阿里巴巴和淘宝网的很多架构也是基于SOA的,请谈一下选择和实施SOA的前因后果。
程立:支付宝早期的单一应用程序架构只存在了很短一段时间就受到了挑战。
首先对这种架构发起挑战的是团队组织结构与分工的变化。随着业务领域的拓展,并行的项目越来越多,研发团队也迅速扩大,为了使团队更好地配合业务,走向专业化,我们内部开始按照业务线分组。跨组之间的沟通成本的提高要求必须将各自负责的系统严格切开,降低相互间的耦合度。
另一个挑战与支付宝业务特点密切相关。作为互联网上的新型服务,必须快速变化才能满足需要,曾经有很长一段时间,我们保持每周两次的新版本发布速度;而作为电子支付服务,它又必须绝对可靠、高度可用。为了解决这个稳定与快速的矛盾,我们必须将系统中的业务核心独立出来,由专业的团队、通过更严格的研发体系来支持它的发展;前端应用程序则继续以互联网速度高速发展。
业务、技术、管理上同时提出了解耦的需要,而“服务”很好地统一了这三者,所以,选择SOA作为技术架构的发展方向是很自然的。
现在,我们已经围绕着公司的基础业务建设了几大核心服务系统,并且搭建了以 ESB 为骨干、以服务框架为基础的面向服务基础设施。太极拳中讲究腰功,拳论中说“腰为主宰,腰为轴,刻刻留意在腰间”。这些核心服务以及配套的基础设施很像支付宝系统的“活腰”,它们的高可靠与高可用性是支付宝系统整体稳定性的基础,它们的灵活性与可重用性支持前端业务有条不紊地创新、整合与优化,它们的可伸缩性保证了系统能够支撑持续的快速业务增长。
InfoQ中文站:现在你们也对外开放了很多服务,在架构设计上有做特殊的考虑,或者经验吗?
程立:支付宝很早就提供了外部API,为互联网上的电子商务提供安全交易与资金流解决方案。现在支付宝已有上百个开放的API服务,连接了数十万大大小小的商户系统。
我们觉得设计开放API平台的思路与基于SOA原则进行架构设计很相似:业务上,需要理顺业务关系、划分清晰的企业业务边界、并制定业务处理规范;从技术上说,需要制定统一的技术标准、建设统一的通信基础设施。由于新产品会不断推出,因此,支付宝在内部建立了一个API容器,方便扩展新产品。将 SOA搬到互联网上,SOA体系中固有的一些问题,如安全性、可靠性、接口契约的稳定性等问题就会被放大,在架构设计与标准制定时,必须很好地考虑这些问题。
出于安全与合规的需要,支付宝在制定API的业务规范与技术标准时,特别关注身份与安全体系;安全与方便是一对矛盾,为了更好地处理这两者的关系,支付宝在架构上支持灵活的安全体系,可以根据业务特性与商户个性需要,在安全性与方便性之间进行折衷。
互联网上系统交互的非可靠性与交易与支付类业务的可靠性要求之间也是一对矛盾,因此,接口标准与统一的通信基础设施中我们针对可靠性进行了专门的设计。
从接口契约稳定性上说,我们当时的做法是将技术标准设计成允许API接口增加新参数,提供版本参数,提供API接口的个性化配置能力,允许商户定义一部分API上交换的数据与处理行为等。
随着支付宝业务领域不断拓展,原来的从需求->解决方案->产品->API的方式,周期太长,已经难以快速满足大量合作伙伴的需求。因此,支付宝现在正在由产品式的开放转向平台式服务的开放,通过加强开放基础设施的建设,向合作伙伴提供更基础、更可重用、更体系化的服务,达到与合作伙伴充分协同,建设繁荣、共赢的电子商务生态圈的目标。同时,开放的业务服务与开放的技术平台也正在推动支付宝的业务与技术架构向前发展,对构建更大规模的分布式系统、更大规模的并行研发模式都带来了积极而深远的影响。
InfoQ中文站:我们知道,支付宝的架构平台中采用了不少开源系统,为何作此选择?
程立:除了支付宝与阿里巴巴集团自主研发的很多基础系统与开发框架、以及一些商业系统之外,支付宝也使用了很多优秀的开源软件。具有蓬勃的生命力的开源软件对支付宝的技术体系是一个很重要的补充。
在某些领域,一些开源软件几乎已经是事实的标准了,它们的高质量也是经过社区的严格考验的,比如Spring和它的POJO编程模型。通过使用这些开源软件,不但让系统可以在开始阶段就站在一个比较高的起点上,而且对于加入团队的新同事,一开始就可以在一个相对熟悉的环境下工作。
在另一些尚未形成标准的领域,在产品选型阶段,我们一般会在开源系统与商业产品间进行细致地选型,必须能够满足业务所要求的主要功能特性与关键质量要求。在同样能够满足主要功能特性与关键质量要求的前提下,谁具有良好的可扩展性,谁更简单,谁具有长期发展的生命力,谁有好的服务支持,都是最后做出选择的重要因素。其中,可扩展性往往是一个选择的关键因素。基于社区集体贡献模式的开源软件在可扩展性方面往往做得很好。当业务发展到一定阶段,在技术上一定会有大量个性化的需求,所选择的系统必须能够支持快速满足这些需求。开放的源代码也使我们在问题响应时,具有更大的主动性。随着开源系统走向商业化运作,在服务支持方面也开始做得更好,这些都进一步增加了开源系统的竞争力。
InfoQ中文站:请谈一下当前架构师所面临的挑战。
程立:“瞻前”、“顾后” ――这是我现在体会到的最大挑战。
先谈谈“瞻前”。当业务个性不明显、业务规模也不大时,架构师还是有很多容易模仿的定式与先例的。但当业务的个性与规模到达一定阶段时,一定会有一些别人从未遇到过的非常困难的问题需要你去解决。作为站在企业技术金字塔塔尖上的一群人,当过去的经验用不上,搜索引擎也不能向你提供任何有用的答案,只有独立去思考,去做出重大决定时,如果没有充分的准备,对企业对个人都是巨大的风险。这需要架构师建立未雨绸缪的意识,不断推演未来可能的变化并思索应对之策,持续而有方向地积累知识、发展能力,建立广泛的技术交流圈子,并且“顾后”。
再谈谈“顾后”。架构师的另一个重要的职责是发掘团队中的好苗子,帮助他们,使他们赶上并超越自己。无论这一点是否写入你的KPI,这样做都是必须的。站在架构师的立场看,架构必须有一个好的技术梯队一层层传递下去,才能够有效、持续地贯彻执行,如果只是架构师们冲在前面,背后空了一大片,架构永远只能停留在蓝图上。站在企业的立场看,企业真正的技术实力,不在于已经有怎样的系统或者平台,而在于是否有一个强大而有生命力的技术团队,通过快速复制架构师的技术与经验,可以帮助发展并壮大这样的团队,而企业整体技术实力的提升也促进了架构师提升。
http://www.infoq.com/cn/articles/chengli-arch-agile-soa
据支付宝公司官方数据,截止到2008年5月6 日,使用支付宝的全球用户已经超过8000万,支付宝每日交易总额超过3.5亿人民币,日交易笔数超过150万笔。看到这儿,我想很多软件开发者朋友可能会问的问题是:这么庞大的支付平台是谁设计的,如何设计的,有什么经验和教训?在2008年5月份阿里巴巴举办的第二届网络工程师侠客行大会上,InfoQ中文站有幸认识了支付宝首席架构师程立先生,并邀请其分享了软件架构设计心得,对当前热门技术的看法,以及在自己团队中对这些热门技术的实践经验等。
nfoQ中文站:请给InfoQ中文站的读者介绍一下您自己。
程立:InfoQ中文站的读者,大家好,我叫程立,来自支付宝架构团队。和大家一样,我也是InfoQ的忠实读者。从2004年起,我开始参与淘宝网与支付宝系统的建设,并于2005年正式加入支付宝,此后一直从事支付宝系统的研发工作。现阶段,我的兴趣在于适合电子支付行业的敏捷、高可用、可伸缩的面向服务架构与开放架构。非常高兴InfoQ中文站提供了这样的机会,让我能够代表支付宝的工程技术人员和大家进行交流,希望这样的交流能增进我们的相互了解。
InfoQ中文站:支付宝技术架构的发展过程是什么样的?
程立:三年多前的支付宝系统只有一个应用程序,而今天,仅仅在你点击支付宝支付按钮的一瞬间,取决于你选择支付方式,很可能调动了数十个独立的系统同时为你提供服务:有的帮你联系银行,有的帮你支付货款,有的推进你的交易,有的帮你联系商家发货,有的警惕地盯着这一切,为这个过程保驾护航……支付宝系统从一个朴素的轻量级Java应用程序,发展到现在由很多自主的服务系统构成的全分布式系统,是一个朝着明确的方向、迈着小而快的步伐、与业务齐肩并进的发展过程。这个过程大致分为两个大的阶段。
第一阶段是基于良好的业务边界,将一根粗烟囱似的应用程序拆成若干个细一些的烟囱。这种切分方式,可以使应用程序间的通信尽量小,只有少量的页面跳转与组合,以及基于JMS的异步消息交换。这种简单的分布就带来一些相当直接的好处,如单个系统的复杂性降低了,研发的并行度提高了,每个系统可以单独进行伸缩。公共的业务,比如账务与交易的处理等,被实现成可共享的类库,打包在每一个应用程序中,这样,可以仍然使用单数据源上简单、低成本的本地事务来保证业务处理所要求的原子性、一致性、隔离性与持久性。在这个阶段,新业务只要是自成体系的,都尽量作为单独的应用程序实现。
在第二阶段,为了使业务核心更加专业化,前端应用能够轻装上阵,我们将原来类库形式的业务核心一个接一个地拿出来,做成了自主的服务系统。这是一个充满业务与技术挑战的过程。仅从技术架构上说,为了使服务能够快速构建、灵活扩展,我们研发了组件式平台,使服务自身能够通过插件式体系进行灵活扩展;为了提供电子支付业务所要求的严格事务一致性、快速响应与高并发处理能力,发展了分布式服务系统中事务协调技术;我们也发展了企业服务总线技术,以提供统一、易于功能扩展、满足各种服务质量要求与集成模式的服务通信机制。每个服务系统连同它操作的数据都是一个自主的业务单元、系统单元与研发单元,很好地支持了业务模型创新、系统伸缩、研发组织小型化与专业化。
总体说来,虽然发展速度较快,但支付宝的技术架构仍然处于一个布局与打基础的阶段,对技术高度重视的态度,和紧紧抓住“服务”不放、持续小步快跑的执行策略,使我们在这个阶段打下了一个良好的发展基础。面对前方业务发展的巨大空间,架构与技术大有用武之地,在这里欢迎有志之士加入我们,共同开拓未来。
InfoQ中文站:请谈一谈您对架构的认识。
程立:老子说“道生一、一生二、二生三、三生万物”。在业务愿景的技术实现过程中,假设“道”为愿景、一为方向、二为战略的话,三就应该是架构了,架构既出,万物化生可矣。战略是整体的、长期的,让架构直接承接战略,带来的最大好处是可以得到一个整体的可持续发展的系统平台。而如果只是让架构从属于项目或者产品,很可能产生的系统也是烟囱型的,短视的。
这是支付宝公司内部对架构的定位。作为技术人员,常常遇到的问题是“提供一个X产品,它的流程为Y,高峰期处理量达到Z。”;也有一些问题的提法有所不同,比如“我们希望进入X市场,Y是我们的主要价值点,这个市场未来三年可能有Z倍的增长,系统能帮我们做什么?”。在我所在的团队中,第二类问题总是由架构师出马,而第一类问题,只要X、Y、Z不太离谱,基本不需要架构师操心。当然,如果现有架构难以支撑这个需求的话,那架构师也是责无旁贷的。
InfoQ中文站:一个成功的架构应该具备什么特点?
程立:架构必须能够达到功能与质量要求,以合理的研发、运行与管理成本产生使客户满意的系统,这是一个基本要素,否则是不及格的。但仅仅满足功能与质量要求的架构,还谈不上成功。
在长距离赛跑中,能够让系统以轻松的步伐始终跑在业务前面,是成功架构的一个显著特点。为了支持这几年业务的快速发展,支付宝的每个重要子系统都历经了若干个大的版本升级。这些升级有些是沿着事先规划好的迭代式发展路线进行的,在保持整体架构稳定的情况下,通过增加功能、扩展数据模型、引入新的处理模式、不断地扩展着功能与性能,持续给予业务强劲的支撑;但也有一些系统的升级则是接近于返工,架构重新设计、代码重写、数据模型重新设计、已有数据大迁移。路遥知马力,虽然这些系统在上线的当时都达到了功能与质量要求,但时间可以判定架构成功与否。
成功架构的另一个显著特点是能够对公司的核心竞争力形成有力的支撑。最近,马云先生在一次公开演讲中,举了一个例子,沃尔玛要增加一万个买家,需要买面积巨大的地,需要买很多的设备,需要很多的仓储;而淘宝只需要增加一台电脑就可以了。这个优势是商业模式带来的,但其背后,是需要有一个高度可伸缩的技术架构来支撑的。
InfoQ中文站:如何最大限度避免一个架构设计的失败?
程立:首先说点外因,架构设计的失败不全是架构师的责任。假如一个企业战略不清,或者虽然定义了清晰的战略,但没有很好的沟通机制让架构师了解战略,很难设计出全局上下一盘棋、富有生命力的架构。当发现看不清全局、看不清未来时,架构师应该设法多沟通、推动改进。如果始终推而不进、沟而不通,就该考虑换个舞台去发展了。不过,对于处于创业期的企业,这一条不大适用,这类企业中,架构发展与业务发展在开始阶段往往是一个快速犯错、快速调整的试错过程,这样的企业走向成功的同时,也常常能够培养出好的架构师。
在做架构设计时必须以业务为本。不是说让架构师去抠业务的枝节,比如流程中的某个环节究竟应该有几个分支、或者某个业务参数应该是多少,而是将精力放在理解业务本质,看清不同业务之间的关系上。在一个业务思想混乱的头脑中产生的系统也一定是结构模糊、行为混乱的。
业务清晰之后,架构师就像导演读透了剧本,可以在脑海中构思与创作了。拟定时空结构、选择风格样式、物色演员、规划每一幕的内容以及幕与幕之间的衔接等等。待一切可以在头脑中栩栩如生、流畅地上演之后,架构其实就出来了。这一步工作做得是好是坏,主要取决于架构师长期以来积累的能力、知识与素养,没有太多的捷径。
有几个算不上新鲜的经验还是值得提一下。首先,架构师要建立自己的QA工具,比如一个质量检查表,能够全方位地从研发、运行、管理等维度,对架构的质量属性进行客观地评估,这个检查表中各项指标的值范围与权重需要针对实际情况进行个性化定制。到了一个新环境中的架构师往往需要一个适应期,在这个适应期中除了熟悉新公司的现有业务与系统之外,很重要的一个工作就是调整原来的质量评估体系,使之新公司的业务相匹配。其次,在架构师头脑中的虚拟舞台上,演员是一个个系统,对每种系统的能力与特性的理解会决定他构思出来的剧情在真实上演时能在多大程度上符合期望,这需要在实践中关注并积累,如果引入了全新的演员,一定得让他试镜。还有一个是习惯问题:不要把脑海中出现的第一个设计当作最终版本,只要时间允许,要多创作几个版本,其间多与同事讨论、做些换换脑筋的事,避免陷于某种定式跳不出来。这需要架构师养成习惯,也需要公司研发流程的支持,比如让架构师尽量早地介入项目,有充分的时间酝酿与斟酌。
最后,架构设计不可能不犯错,因此很重要一点是当发现架构设计有错误时,一定不要尝试掩盖或者固执地坚持自己的错误,调整得越早,付出的代价就越低。好的企业一定有一个非常宽容的氛围、允许犯错并且鼓励及时改正。我曾经有过几次在开发已经进行到三分之一甚至更久时,发现架构设计有严重缺陷的经历,由于及时调整,加上团队的理解与配合,最终项目仍然取得成功,因此对这一点感受很深。
InfoQ中文站:在支付宝的技术团队中,也采用了敏捷的方法,请谈谈这方面的经验。
程立:支付宝的研发体系是从自身实际出发制定的,既要保障产品的高品质,又要保持对业务变化的快速响应,加上协调多个团队高度并行开发的需要,整套研发体系是一个精心设计的严谨结构,也是比较重量型的。但我们还是可以从中找到敏捷方法中的一些重要元素。
首先谈谈迭代。这里,以我所熟悉的支付宝架构团队的研发模式举一些例子。之前提到,支付宝技术架构是采用与业务发展齐肩并进的策略,这个过程就像给 F1比赛中的赛车换轮胎,所有架构改进的实施必须安全、快速,尽量不打断正常的产品研发的节奏。因此,在确定技术架构的基本发展方向或者基础设施产品的蓝图之后,我们会将研发工作切分成很短的迭代,每一个迭代的目标明确,一般只解决少数几个技术问题。
以引入企业服务总线为例,第一个迭代的任务是调研,目标是概念验证与产品选型;第二个迭代是试水,我们选择了一个新的业务产品作为服务总线应用的小白鼠,当时的目标是解决高可用部署模式问题、以及集成逻辑的统一管理问题,架构师进入到该项目中,通过服务总线提供该产品与其它系统的集成方案,这个迭代与新产品发布的同时完成;以后的迭代是一系列推广使用的迭代,几次之后,我们完全替换了原来不够灵活的商用JMS服务器集群,并且整个技术团队可以不依赖架构组使用服务总线了;再以后的迭代是服务总线的自身的改进,如QoS的改进、服务治理功能的增加等等。采用这种方式,每一次迭代都有实际可运行的产出,并且其结果可以作为选择下一轮迭代目标的依据。以这种模式,架构发展以一种稳健的方式小步快跑着。但与有些敏捷方法学建议的固定迭代时长有些不同,当“搭顺风车”时,是宿主项目的规模决定迭代的时长。
保证高效的沟通是另一个重要的问题,这通常是采用我们俗称为“闭关”的形式来解决的。项目上到一定规模,就会包下一个会议室,项目经理、架构、系分、开发、测试等人员都会坐在一起,保持沟通的高效率,也减少不必要的干扰。对于长周期的项目、或者需求难以在初期完全确定时,在一个项目内部也设计一些迭代,开发人员增量地交付功能,测试并行进行功能验证,畅通无阻的沟通以及项目经理在场的协调管理是这种工作模式能够顺畅运转的关键。
InfoQ中文站:阿里巴巴和淘宝网的很多架构也是基于SOA的,请谈一下选择和实施SOA的前因后果。
程立:支付宝早期的单一应用程序架构只存在了很短一段时间就受到了挑战。
首先对这种架构发起挑战的是团队组织结构与分工的变化。随着业务领域的拓展,并行的项目越来越多,研发团队也迅速扩大,为了使团队更好地配合业务,走向专业化,我们内部开始按照业务线分组。跨组之间的沟通成本的提高要求必须将各自负责的系统严格切开,降低相互间的耦合度。
另一个挑战与支付宝业务特点密切相关。作为互联网上的新型服务,必须快速变化才能满足需要,曾经有很长一段时间,我们保持每周两次的新版本发布速度;而作为电子支付服务,它又必须绝对可靠、高度可用。为了解决这个稳定与快速的矛盾,我们必须将系统中的业务核心独立出来,由专业的团队、通过更严格的研发体系来支持它的发展;前端应用程序则继续以互联网速度高速发展。
业务、技术、管理上同时提出了解耦的需要,而“服务”很好地统一了这三者,所以,选择SOA作为技术架构的发展方向是很自然的。
现在,我们已经围绕着公司的基础业务建设了几大核心服务系统,并且搭建了以 ESB 为骨干、以服务框架为基础的面向服务基础设施。太极拳中讲究腰功,拳论中说“腰为主宰,腰为轴,刻刻留意在腰间”。这些核心服务以及配套的基础设施很像支付宝系统的“活腰”,它们的高可靠与高可用性是支付宝系统整体稳定性的基础,它们的灵活性与可重用性支持前端业务有条不紊地创新、整合与优化,它们的可伸缩性保证了系统能够支撑持续的快速业务增长。
InfoQ中文站:现在你们也对外开放了很多服务,在架构设计上有做特殊的考虑,或者经验吗?
程立:支付宝很早就提供了外部API,为互联网上的电子商务提供安全交易与资金流解决方案。现在支付宝已有上百个开放的API服务,连接了数十万大大小小的商户系统。
我们觉得设计开放API平台的思路与基于SOA原则进行架构设计很相似:业务上,需要理顺业务关系、划分清晰的企业业务边界、并制定业务处理规范;从技术上说,需要制定统一的技术标准、建设统一的通信基础设施。由于新产品会不断推出,因此,支付宝在内部建立了一个API容器,方便扩展新产品。将 SOA搬到互联网上,SOA体系中固有的一些问题,如安全性、可靠性、接口契约的稳定性等问题就会被放大,在架构设计与标准制定时,必须很好地考虑这些问题。
出于安全与合规的需要,支付宝在制定API的业务规范与技术标准时,特别关注身份与安全体系;安全与方便是一对矛盾,为了更好地处理这两者的关系,支付宝在架构上支持灵活的安全体系,可以根据业务特性与商户个性需要,在安全性与方便性之间进行折衷。
互联网上系统交互的非可靠性与交易与支付类业务的可靠性要求之间也是一对矛盾,因此,接口标准与统一的通信基础设施中我们针对可靠性进行了专门的设计。
从接口契约稳定性上说,我们当时的做法是将技术标准设计成允许API接口增加新参数,提供版本参数,提供API接口的个性化配置能力,允许商户定义一部分API上交换的数据与处理行为等。
随着支付宝业务领域不断拓展,原来的从需求->解决方案->产品->API的方式,周期太长,已经难以快速满足大量合作伙伴的需求。因此,支付宝现在正在由产品式的开放转向平台式服务的开放,通过加强开放基础设施的建设,向合作伙伴提供更基础、更可重用、更体系化的服务,达到与合作伙伴充分协同,建设繁荣、共赢的电子商务生态圈的目标。同时,开放的业务服务与开放的技术平台也正在推动支付宝的业务与技术架构向前发展,对构建更大规模的分布式系统、更大规模的并行研发模式都带来了积极而深远的影响。
InfoQ中文站:我们知道,支付宝的架构平台中采用了不少开源系统,为何作此选择?
程立:除了支付宝与阿里巴巴集团自主研发的很多基础系统与开发框架、以及一些商业系统之外,支付宝也使用了很多优秀的开源软件。具有蓬勃的生命力的开源软件对支付宝的技术体系是一个很重要的补充。
在某些领域,一些开源软件几乎已经是事实的标准了,它们的高质量也是经过社区的严格考验的,比如Spring和它的POJO编程模型。通过使用这些开源软件,不但让系统可以在开始阶段就站在一个比较高的起点上,而且对于加入团队的新同事,一开始就可以在一个相对熟悉的环境下工作。
在另一些尚未形成标准的领域,在产品选型阶段,我们一般会在开源系统与商业产品间进行细致地选型,必须能够满足业务所要求的主要功能特性与关键质量要求。在同样能够满足主要功能特性与关键质量要求的前提下,谁具有良好的可扩展性,谁更简单,谁具有长期发展的生命力,谁有好的服务支持,都是最后做出选择的重要因素。其中,可扩展性往往是一个选择的关键因素。基于社区集体贡献模式的开源软件在可扩展性方面往往做得很好。当业务发展到一定阶段,在技术上一定会有大量个性化的需求,所选择的系统必须能够支持快速满足这些需求。开放的源代码也使我们在问题响应时,具有更大的主动性。随着开源系统走向商业化运作,在服务支持方面也开始做得更好,这些都进一步增加了开源系统的竞争力。
InfoQ中文站:请谈一下当前架构师所面临的挑战。
程立:“瞻前”、“顾后” ――这是我现在体会到的最大挑战。
先谈谈“瞻前”。当业务个性不明显、业务规模也不大时,架构师还是有很多容易模仿的定式与先例的。但当业务的个性与规模到达一定阶段时,一定会有一些别人从未遇到过的非常困难的问题需要你去解决。作为站在企业技术金字塔塔尖上的一群人,当过去的经验用不上,搜索引擎也不能向你提供任何有用的答案,只有独立去思考,去做出重大决定时,如果没有充分的准备,对企业对个人都是巨大的风险。这需要架构师建立未雨绸缪的意识,不断推演未来可能的变化并思索应对之策,持续而有方向地积累知识、发展能力,建立广泛的技术交流圈子,并且“顾后”。
再谈谈“顾后”。架构师的另一个重要的职责是发掘团队中的好苗子,帮助他们,使他们赶上并超越自己。无论这一点是否写入你的KPI,这样做都是必须的。站在架构师的立场看,架构必须有一个好的技术梯队一层层传递下去,才能够有效、持续地贯彻执行,如果只是架构师们冲在前面,背后空了一大片,架构永远只能停留在蓝图上。站在企业的立场看,企业真正的技术实力,不在于已经有怎样的系统或者平台,而在于是否有一个强大而有生命力的技术团队,通过快速复制架构师的技术与经验,可以帮助发展并壮大这样的团队,而企业整体技术实力的提升也促进了架构师提升。
发表评论
-
[转]访问控制模型DAC,MAC,RBAC
2010-04-30 17:10 5061访问控制是指控制 ... -
什么是Alpha,Beta,RC,RTM版
2009-08-31 22:24 2504关于Alpha.beta,RC等版本意义 alpha就是α ... -
转载一篇老文章:构建高性能J2EE应用的十个技巧
2009-08-31 10:27 1245在最近的几次性能调优的实战中发现,往往是我们认为说的不值得说的 ... -
[转]详细介绍什么是Java虚拟机
2009-08-16 11:35 1412一、什么是Java虚拟机 当你谈到Java虚拟 ... -
关于系统调优的总结
2009-08-01 11:23 1299系统调优涉及到很多的方面,可以从以下几个方面通盘考虑。 ... -
在websphere6.1中更改事务隔离级别的步骤
2009-07-02 11:14 4255找了好久都不知道如何更改,今天终于找到了,记录一下。 参考: ... -
[转]从奥运订票系统瘫痪说起——谈FastCGI 与IT 架构
2008-12-22 15:20 19862008年,对于首都人民来说,没有什么比奥运会更大的事情了。如 ... -
[转]一种正规的性能调优方法:基于等待的调优
2008-11-12 23:46 917原文地址: http://www.info ... -
影响程序性能的主要因素
2008-11-04 00:11 4989我在公司负责产品的研 ... -
[转]如何获得WASv5.x/6.x的 Java HeapDump和JavaCore文件
2008-10-22 13:51 2378具体步骤如下: 1、 设置Windows的环境变量,使WAS ... -
关于重写equals和hashCode方法
2008-10-21 23:39 1848什么时候需要重写equals和hashCode方法? 据个 ... -
大型网站架构演变和知识体系
2008-10-09 09:48 7042原帖地址:http://www.blogjava.net/Bl ... -
Log4j输出格式控制
2008-09-23 22:21 14053参数 说明 例子 %c 列出logger名 ... -
LDAP 相关
2008-09-22 22:42 1426以前看过LDAP的相关介绍,总是感觉一头雾水,最近实际操作了一 ... -
Why Use Cases Are Not "Functions"
2008-08-04 14:28 1005by Kurt Bittner General Manager ... -
关于需求分析、系统设计的一个问题
2008-06-19 00:45 1471需求分析进行到什么程度就可以开始概要设计了? 概要设计做到什么 ... -
[转帖]深入浅出SQL教程之Group by和Having
2008-01-22 09:24 3263在介绍GROUP BY 和 HAVING 子句前,我们必需先讲 ... -
[转]JNDI的一篇文章
2007-12-29 11:30 11630【转贴一篇】 ------------ JNDI是 Java ... -
同步和异步
2007-12-29 11:08 22418同步在一定程度上可以看做是单线程,这个线程请求一个方法后就待这 ... -
[转]Java程序基础测试
2007-12-16 22:16 86一、填空(每题2分,总计40分) 1.分别写出数字17的二进制 ...
相关推荐
**SOA(Service-Oriented Architecture,面向服务架构)是一种软件设计模式,它提倡将功能作为独立的服务,这些服务可以通过网络进行交互,实现...通过深入理解和实践这些知识点,可以更好地设计和实施SOA解决方案。
【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
【项目资源】: 适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
# 基于Python的KMeans和EM算法结合图像分割项目 ## 项目简介 本项目结合KMeans聚类和EM(期望最大化)算法,实现对马赛克图像的精准分割。通过Gabor滤波器提取图像的多维特征,并利用KMeans进行初步聚类,随后使用EM算法优化聚类结果,最终生成高质量的分割图像。 ## 项目的主要特性和功能 1. 图像导入和预处理: 支持导入马赛克图像,并进行灰度化、滤波等预处理操作。 2. 特征提取: 使用Gabor滤波器提取图像的多维特征向量。 3. 聚类分析: 使用KMeans算法对图像进行初步聚类。 利用KMeans的聚类中心初始化EM算法,进一步优化聚类结果。 4. 图像生成和比较: 生成分割后的图像,并与原始图像进行比较,评估分割效果。 5. 数值比较: 通过计算特征向量之间的余弦相似度,量化分割效果的提升。 ## 安装使用步骤 ### 假设用户已经下载了项目的源码文件 1. 环境准备:
HCIP第一次作业:静态路由综合实验
【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
内容概要:本文详细介绍了Johnson-SU分布的参数计算与优化过程,涵盖位置参数γ、形状参数δ、尺度参数ξ和伸缩参数λ的计算方法,并实现了相应的Python代码。文中首先导入必要的库并设置随机种子以确保结果的可复现性。接着,分别定义了四个参数的计算函数,其中位置参数γ通过加权平均值计算,形状参数δ基于局部均值和标准差的比值,尺度参数ξ结合峰度和绝对偏差,伸缩参数λ依据偏态系数。此外,还实现了Johnson-SU分布的概率密度函数(PDF),并使用负对数似然函数作为目标函数,采用L-BFGS-B算法进行参数优化。最后,通过弹性网络的贝叶斯优化展示了另一种参数优化方法。; 适合人群:具有Python编程基础,对统计学和机器学习有一定了解的研究人员或工程师。; 使用场景及目标:①需要对复杂数据分布进行建模和拟合的场景;②希望通过优化算法提升模型性能的研究项目;③学习如何实现和应用先进的统计分布及优化技术。; 阅读建议:由于涉及较多数学公式和编程实现,建议读者在阅读时结合相关数学知识,同时动手实践代码,以便更好地理解和掌握Johnson-SU分布及其优化方法。
TSP问题的3种智能优化方法求解(研究生课程《智能优化算法》结课大作业).zip
【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
【项目资源】: 单片机项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
自动发布Java项目(Tomcat)Shell脚本
# 基于webpack和Vue的前端项目构建方案 ## 项目简介 本项目是基于webpack和Vue构建的前端项目方案,借助webpack强大的打包能力以及Vue的开发特性,可用于快速搭建现代化的前端应用。项目不仅完成了基本的webpack与Vue的集成配置,还在构建速度优化和代码规范性方面做了诸多配置。 ## 项目的主要特性和功能 1. 打包功能运用webpack进行模块打包,支持将scss转换为css,借助babel实现语法转换。 2. Vue开发支持集成Vue框架,能使用Vue单文件组件的开发模式。 3. 构建优化采用threadloader实现多进程打包,cacheloader缓存资源,极大提高构建速度开启热更新功能,开发更高效。 4. 错误处理与优化提供不同环境下的错误映射配置,便于定位错误利用webpackbundleanalyzer分析打包体积。
Hands-On Large Language Models - Jay Alammar 袋鼠书 《动手学大语言模型》PDF
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
# 基于Arduino Feather M0和Raspberry Pi的传感器数据采集与监控系统 ## 项目简介 本项目是一个基于Arduino Feather M0和Raspberry Pi的传感器数据采集与监控系统。系统通过Arduino Feather M0采集传感器数据,并通过WiFi将数据传输到Raspberry Pi。Raspberry Pi运行BalenaOS,集成了MySQL、PHP、NGINX、Apache和Grafana等工具,用于数据的存储、处理和可视化。项目适用于环境监测、物联网设备监控等场景。 ## 项目的主要特性和功能 1. 传感器数据采集使用Arduino Feather M0和AM2315传感器采集温度和湿度数据。 2. WiFi数据传输Arduino Feather M0通过WiFi将采集到的数据传输到Raspberry Pi。
资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。
【项目资源】: 适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
【项目资源】: 物联网项目适用于从基础到高级的各种项目,特别是在性能要求较高的场景中,比如操作系统开发、嵌入式编程和底层系统编程。如果您是初学者,可以从简单的控制台程序开始练习;如果是进阶开发者,可以尝试涉及硬件或网络的项目。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。 # 注意 1. 本资源仅用于开源学习和技术交流。不可商用等,一切后果由使用者承担。 2. 部分字体以及插图等来自网络,若是侵权请联系删除。
# 基于Arduino的WiFi按钮项目 ## 一、项目简介 本项目是一个基于ESP8266芯片的Arduino项目,主要实现WiFi连接、电压检测、LED灯控制以及向服务器发送POST请求等功能。通过简单的按钮操作,可以实现与服务器通信并获取相关信息,同时能检测电池电压并提示用户。 ## 二、项目的主要特性和功能 1. WiFi连接项目能够自动连接到指定的WiFi网络。 2. 电压检测通过ADC(模数转换器)检测电池电压,并在电压低于阈值时发出警告。 3. LED灯控制通过控制LED灯的亮灭来提示用户不同的状态信息(如连接成功、电压低等)。 4. 服务器通信项目可以向指定的服务器发送POST请求并处理返回的HTTP响应。 ## 三、安装使用步骤 1. 环境准备确保已安装Arduino IDE和ESP8266插件。 2. 下载源码下载项目的源码文件并解压。 3. 打开项目在Arduino IDE中打开解压后的main.cpp文件。