MySpace的六次重构

在每个里程碑,站点负担都会超过底层系统部分组件的最大载荷
<wbr>,特别是数据库和存储系统。接着,功能出现问题,用户失声尖叫<wbr>。最后,技术团队必须为此修订系统策略。 <p style="TEXT-INDENT: 2em">虽然自2005年早期,站点账户数超过7百万后<wbr>,系统架构到目前为止保持了相对稳定,但MySpace仍然在为S<wbr>QL Server支持的同时连接数等方面继续攻坚,Benedetto<wbr>说,"我们已经尽可能把事情做到最好"。</wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em"></p> <p style="TEXT-INDENT: 2em"> 里程碑一:50万账户</p> <p style="TEXT-INDENT: 2em">按Benedetto 的说法,MySpace最初的系统很小,只有两台Web服务器和一<wbr>个数据库服务器。那时使用的是Dell双CPU、4G内存的系统。</wbr></p> <p style="TEXT-INDENT: 2em">单个数据库就意味着所有数据都存储在一个地方<wbr>,再由两台Web服务器分担处理用户请求的工作量<wbr>。但就像MySpace后来的几次底层系统修订时的情况一样<wbr>,三服务器架构很快不堪重负。此后一个时期内,MySpace基本<wbr>是通过添置更多Web服务器来对付用户暴增问题的。 </wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">但到在2004年早期,MySpace用户数增长到50万后<wbr>,数据库服务器也已开始汗流浃背。</wbr></p> <p style="TEXT-INDENT: 2em">但和Web服务器不同,增加数据库可没那么简单<wbr>。如果一个站点由多个数据库支持,设计者必须考虑的是<wbr>,如何在保证数据一致性的前提下,让多个数据库分担压力。</wbr></wbr></p> <p style="TEXT-INDENT: 2em">在第二代架构中,MySpace运行在3个SQL Server数据库服务器上——一个为主,所有的新数据都向它提交<wbr>,然后由它复制到其他两个;另两个全力向用户供给数据<wbr>,用以在博客和个人资料栏显示。这种方式在一段时间内效果很好—<wbr>—只要增加数据库服务器,加大硬盘,就可以应对用户数和访问量的增<wbr>加。 </wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em"></p> <p style="TEXT-INDENT: 2em">里程碑二:1-2百万账户 </p> <p style="TEXT-INDENT: 2em">MySpace注册数到达1百万至2百万区间后<wbr>,数据库服务器开始受制于I/O容量——即它们存取数据的速度<wbr>。而当时才是2004年中,距离上次数据库系统调整不过数月<wbr>。用户的提交请求被阻塞,就像千人乐迷要挤进只能容纳几百人的夜总<wbr>会,站点开始遭遇"主要矛盾",Benedetto说<wbr>,这意味着MySpace永远都会轻度落后于用户需求。</wbr></wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">"有人花5分钟都无法完成留言,因此用户总是抱怨说网站已经完<wbr>蛋了。"他补充道。</wbr></p> <p style="TEXT-INDENT: 2em">这一次的数据库架构按照垂直分割模式设计,不同的数据库服务于<wbr>站点的不同功能,如登录、用户资料和博客。于是,站点的扩展性问题<wbr>看似又可以告一段落了,可以歇一阵子。</wbr></wbr></p> <p style="TEXT-INDENT: 2em">垂直分割策略利于多个数据库分担访问压力,当用户要求增加新功<wbr>能时,MySpace将投入新的数据库予以支持它<wbr>。账户到达2百万后,MySpace还从存储设备与数据库服务器直<wbr>接交互的方式切换到SAN(Storage Area Network,存储区域网络)——用高带宽、专门设计的网络将大<wbr>量磁盘存储设备连接在一起,而数据库连接到SAN<wbr>。这项措施极大提升了系统性能、正常运行时间和可靠性<wbr>,Benedetto说。 </wbr></wbr></wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em"></p> <p style="TEXT-INDENT: 2em">里程碑三:3百万账户</p> <p style="TEXT-INDENT: 2em">当用户继续增加到3百万后,垂直分割策略也开始难以为继<wbr>。尽管站点的各个应用被设计得高度独立,但有些信息必须共享<wbr>。在这个架构里,每个数据库必须有各自的用户表副本—<wbr>—MySpace授权用户的电子花名册。这就意味着一个用户注册时<wbr>,该条账户记录必须在9个不同数据库上分别创建。但在个别情况下<wbr>,如果其中某台数据库服务器临时不可到达,对应事务就会失败<wbr>,从而造成账户非完全创建,最终导致此用户的该项服务无效。</wbr></wbr></wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">另外一个问题是,个别应用如博客增长太快,那么专门为它服务的<wbr>数据库就有巨大压力。 </wbr></p> <p style="TEXT-INDENT: 2em">2004年中,MySpace面临Web开发者称之为<wbr>"向上扩展"对"向外扩展"(译者注:Scale Up和Scale Out,也称硬件扩展和软件扩展)的抉择——要么扩展到更大更强<wbr>、也更昂贵的服务器上,要么部署大量相对便宜的服务器来分担数据库<wbr>压力。一般来说,大型站点倾向于向外扩展,因为这将让它们得以保留<wbr>通过增加服务器以提升系统能力的后路。</wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">但成功地向外扩展架构必须解决复杂的分布式计算问题<wbr>,大型站点如Google、Yahoo和Amazon.com,都必须自行研发大量相关技术。以Google为例<wbr>,它构建了自己的分布式文件系统。</wbr></wbr></p> <p style="TEXT-INDENT: 2em">另外,向外扩展策略还需要大量重写原来软件,以保证系统能在分<wbr>布式服务器上运行。"搞不好,开发人员的所有工作都将白费"<wbr>,Benedetto说。</wbr></wbr></p> <p style="TEXT-INDENT: 2em">因此,MySpace首先将重点放在了向上扩展上<wbr>,花费了大约1个半月时间研究升级到32CPU服务器以管理更大数<wbr>据库的问题。Benedetto说,"那时候,这个方案看似可能解<wbr>决一切问题。"如稳定性,更棒的是对现有软件几乎没有改动要求。 </wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">糟糕的是,高端服务器极其昂贵,是购置同样处理能力和内存速度<wbr>的多台服务器总和的很多倍。而且,站点架构师预测,从长期来看<wbr>,即便是巨型数据库,最后也会不堪重负,Benedetto说,<wbr>"换句话讲,只要增长趋势存在,我们最后无论如何都要走上向外扩展<wbr>的道路。"</wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">因此,MySpace最终将目光移到分布式计算架构—<wbr>—它在物理上分布的众多服务器,整体必须逻辑上等同于单台机器<wbr>。拿数据库来说,就不能再像过去那样将应用拆分,再以不同数据库分<wbr>别支持,而必须将整个站点看作一个应用。现在,数据库模型里只有一<wbr>个用户表,支持博客、个人资料和其他核心功能的数据都存储在相同数<wbr>据库。 </wbr></wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">既然所有的核心数据逻辑上都组织到一个数据库<wbr>,那么MySpace必须找到新的办法以分担负荷——显然<wbr>,运行在普通硬件上的单个数据库服务器是无能为力的。这次<wbr>,不再按站点功能和应用分割数据库,MySpace开始将它的用户<wbr>按每百万一组分割,然后将各组的全部数据分别存入独立的SQL Server实例。目前,MySpace的每台数据库服务器实际运<wbr>行两个SQL Server实例,也就是说每台服务器服务大约2百万用户<wbr>。Benedetto指出,以后还可以按照这种模式以更小粒度划分<wbr>架构,从而优化负荷分担。 </wbr></wbr></wbr></wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">当然,还是有一个特殊数据库保存了所有账户的名称和密码<wbr>。用户登录后,保存了他们其他数据的数据库再接管服务<wbr>。特殊数据库的用户表虽然庞大,但它只负责用户登录,功能单一<wbr>,所以负荷还是比较容易控制的。</wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em"></p> <p style="TEXT-INDENT: 2em">里程碑四:9百万到1千7百万账户</p> <p style="TEXT-INDENT: 2em"></p> <p style="TEXT-INDENT: 2em">2005年早期,账户达到9百万后,MySpace开始用Micr<wbr>osoft的C#编写ASP.NET程序。C#是C语言的最新派生语言,吸收了C++和Java的优点<wbr>,依托于Microsoft .NET框架(Microsoft为软件组件化和分布式计算而设计<wbr>的模型架构)。ASP.NET则由编写Web站点脚本的ASP技术演化而来,是Microsoft目前主推的Web站点编程环境。</wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">可以说是立竿见影, MySpace马上就发现ASP.NET程序运行更有效率,与ColdFusion相比,完成同样任务需消耗的处理器能力更小<wbr>。据技术总监Whitcomb说,新代码需要150台服务器完成的<wbr>工作,如果用ColdFusion则需要246台<wbr>。Benedetto还指出,性能上升的另一个原因可能是在变换软<wbr>件平台,并用新语言重写代码的过程中,程序员复审并优化了一些功能<wbr>流程。</wbr></wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em"></p> <p style="TEXT-INDENT: 2em">最终,MySpace开始大规模迁移到ASP.NET。即便剩余的少部分 ColdFusion代码,也从Cold-Fusion服务器搬到了ASP.NET,因为他们得到了BlueDragon.NET(乔治亚州阿尔法利塔 New Atlanta Communications公司的产品,它能将ColdFusi<wbr>on代码自动重新编译到Microsoft平台)的帮助。</wbr></p> <p style="TEXT-INDENT: 2em">账户达到1千万时,MySpace再次遭遇存储瓶颈问题<wbr>。SAN的引入解决了早期一些性能问题,但站点目前的要求已经开始<wbr>周期性超越SAN的I/O容量——即它从磁盘存储系统读写数据的极<wbr>限速度。 </wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">原因之一是每数据库1百万账户的分割策略,通常情况下的确可以<wbr>将压力均分到各台服务器,但现实并非一成不变。比如第七台账户数据<wbr>库上线后,仅仅7天就被塞满了,主要原因是佛罗里达一个乐队的歌迷<wbr>疯狂注册。</wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">某个数据库可能因为任何原因,在任何时候遭遇主要负荷,这时<wbr>,SAN中绑定到该数据库的磁盘存储设备簇就可能过载。<wbr>"SAN让磁盘I/O能力大幅提升了,但将它们绑定到特定数据库的<wbr>做法是错误的。"Benedetto说。</wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">最初,MySpace通过定期重新分配SAN中数据<wbr>,以让其更为均衡的方法基本解决了这个问题,但这是一个人工过程<wbr>,"大概需要两个人全职工作。"Benedetto说。 </wbr></wbr></p> <p style="TEXT-INDENT: 2em">长期解决方案是迁移到虚拟存储体系上,这样,整个SAN被当作<wbr>一个巨型存储池,不再要求每个磁盘为特定应用服务<wbr>。MySpace目前采用了一种新型SAN设备—<wbr>—来自加利福尼亚州弗里蒙特的3PARdata。</wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">在3PAR的系统里,仍能在逻辑上按容量划分数据存储<wbr>,但它不再被绑定到特定磁盘或磁盘簇,而是散布于大量磁盘<wbr>。这就使均分数据访问负荷成为可能。当数据库需要写入一组数据时<wbr>,任何空闲磁盘都可以马上完成这项工作,而不再像以前那样阻塞在可<wbr>能已经过载的磁盘阵列处。而且,因为多个磁盘都有数据副本<wbr>,读取数据时,也不会使SAN的任何组件过载。 </wbr></wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">当2005年春天账户数达到1千7百万时,MySpace又启<wbr>用了新的策略以减轻存储系统压力,即增加数据缓存层—<wbr>—位于Web服务器和数据库服务器之间,其唯一职能是在内存中建立<wbr>被频繁请求数据对象的副本,如此一来,不访问数据库也可以向Web<wbr>应用供给数据。换句话说,100个用户请求同一份资料<wbr>,以前需要查询数据库100次,而现在只需1次,其余都可从缓存数<wbr>据中获得。当然如果页面变化,缓存的数据必须从内存擦除<wbr>,然后重新从数据库获取——但在此之前,数据库的压力已经大大减轻<wbr>,整个站点的性能得到提升。 </wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">缓存区还为那些不需要记入数据库的数据提供了驿站<wbr>,比如为跟踪用户会话而创建的临时文件——Benedetto坦言<wbr>他需要在这方面补课,"我是数据库存储狂热分子,因此我总是想着将<wbr>万事万物都存到数据库。"但将像会话跟踪这类的数据也存到数据库<wbr>,站点将陷入泥沼。</wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">增加缓存服务器是"一开始就应该做的事情,但我们成长太快<wbr>,以致于没有时间坐下来好好研究这件事情。"Benedetto补<wbr>充道。</wbr></wbr></p> <p style="TEXT-INDENT: 2em"></p> <p style="TEXT-INDENT: 2em"> 里程碑五:2千6百万账户</p> <p style="TEXT-INDENT: 2em">2005年中期,服务账户数达到2千6百万时<wbr>,MySpace切换到了还处于beta测试的SQL Server 2005。转换何太急?主流看法是2005版支持64位处理器<wbr>。但Benedetto说,"这不是主要原因,尽管这也很重要<wbr>;主要还是因为我们对内存的渴求。"支持64位的数据库可以管理更<wbr>多内存。</wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">更多内存就意味着更高的性能和更大的容量。原来运行32位版本<wbr>的SQL Server服务器,能同时使用的内存最多只有4G<wbr>。切换到64位,就好像加粗了输水管的直径。升级到SQL Server 2005和64位Windows Server 2003后,MySpace每台服务器配备了32G内存<wbr>,后于2006年再次将配置标准提升到64G。 </wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em"></p> <p style="TEXT-INDENT: 2em">意外错误</p> <p style="TEXT-INDENT: 2em">如果没有对系统架构的历次修改与升级,MySpace根本不可<wbr>能走到今天。但是,为什么系统还经常吃撑着了?很多用户抱怨的<wbr>"意外错误"是怎么引起的呢?</wbr></wbr></p> <p style="TEXT-INDENT: 2em">原因之一是MySpace对Microsoft的Web技术的<wbr>应用已经进入连Microsoft自己也才刚刚开始探索的领域<wbr>。比如11月,超出SQL Server最大同时连接数,MySpace系统崩溃<wbr>。Benedetto说,这类可能引发系统崩溃的情况大概三天才会<wbr>出现一次,但仍然过于频繁了,以致惹人恼怒。一旦数据库,<wbr>"无论这种情况什么时候发生,未缓存的数据都不能从SQL Server获得,那么你就必然看到一个'意外错误'提示。<wbr>"他解释说。 </wbr></wbr></wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">去年夏天,MySpace的Windows 2003多次自动停止服务。后来发现是操作系统一个内置功能惹的祸<wbr>——预防分布式拒绝服务攻击(黑客使用很多客户机向服务器发起大量<wbr>连接请求,以致服务器瘫痪)。MySpace和其他很多顶级大站点<wbr>一样,肯定会经常遭受攻击,但它应该从网络级而不是依靠Windo<wbr>ws本身的功能来解决问题——否则,大量MySpace合法用户连<wbr>接时也会引起服务器反击。</wbr></wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">"我们花了大约一个月时间寻找Windows 2003服务器自动停止的原因。"Benedetto说。最后<wbr>,通过Microsoft的帮助,他们才知道该怎么通知服务器:<wbr>"别开枪,是友军。" </wbr></wbr></p> <p style="TEXT-INDENT: 2em">紧接着是在去年7月某个周日晚上,MySpace总部所在地洛<wbr>杉矶停电,造成整个系统停运12小时。大型Web站点通常要在地理<wbr>上分布配置多个数据中心以预防单点故障。本来,MySpace还有<wbr>其他两个数据中心以应对突发事件,但Web服务器都依赖于部署在洛<wbr>杉矶的SAN。没有洛杉矶的SAN,Web服务器除了恳求你耐心等<wbr>待,不能提供任何服务。</wbr></wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">Benedetto说,主数据中心的可靠性通过下列措施保证<wbr>:可接入两张不同电网,另有后备电源和一台储备有30天燃料的发电<wbr>机。但在这次事故中,不仅两张电网失效,而且在切换到备份电源的过<wbr>程中,操作员烧掉了主动力线路。 </wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">2007年中,MySpace在另两个后备站点上也建设了SA<wbr>N。这对分担负荷大有帮助——正常情况下,每个SAN都能负担三分<wbr>之一的数据访问量。而在紧急情况下,任何一个站点都可以独立支撑整<wbr>个服务,Benedetto说。</wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">MySpace仍然在为提高稳定性奋斗,虽然很多用户表示了足<wbr>够信任且能原谅偶现的错误页面。</wbr></p> <p style="TEXT-INDENT: 2em">"作为开发人员,我憎恶Bug,它太气人了。"Dan Tanner这个31岁的德克萨斯软件工程师说,他通过MySpa<wbr>ce重新联系到了高中和大学同学。"不过,MySpace对我们的<wbr>用处很大,因此我们可以原谅偶发的故障和错误。" Tanner说,如果站点某天出现故障甚至崩溃,恢复以后他还是会<wbr>继续使用。 </wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">这就是为什么Drew在论坛里咆哮时,大部分用户都告诉他应该<wbr>保持平静,如果等几分钟,问题就会解决的原因。Drew无法平静<wbr>,他写道,"我已经两次给MySpace发邮件,而它说一小时前还<wbr>是正常的,现在出了点问题……完全是一堆废话。"另一个用户回复说<wbr>,"毕竟它是免费的。"Benedetto坦承100<wbr>%的可靠性不是他的目标。"它不是银行,而是一个免费的服务。<wbr>"他说。</wbr></wbr></wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">换句话说,MySpace的偶发故障可能造成某人最后更新的个<wbr>人资料丢失,但并不意味着网站弄丢了用户的钱财。<wbr>"关键是要认识到,与保证站点性能相比,丢失少许数据的故障是可接<wbr>受的。"Benedetto说。所以,MySpace甘冒丢失2分<wbr>钟到2小时内任意点数据的危险,在SQL Server配置里延长了"checkpoint"操作—<wbr>—它将待更新数据永久记录到磁盘——的间隔时间,因为这样做可以加<wbr>快数据库的运行。 </wbr></wbr></wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">Benedetto说,同样,开发人员还经常在几个小时内就完<wbr>成构思、编码、测试和发布全过程。这有引入Bug的风险<wbr>,但这样做可以更快实现新功能。而且,因为进行大规模真实测试不具<wbr>可行性,他们的测试通常是在仅以部分活跃用户为对象<wbr>,且用户对软件新功能和改进不知就里的情况下进行的<wbr>。因为事实上不可能做真实的加载测试,他们做的测试通常都是针对站<wbr>点。</wbr></wbr></wbr></wbr></wbr></wbr></p> <p style="TEXT-INDENT: 2em">"我们犯过大量错误,"Benedetto说,"但到头来<wbr>,我认为我们做对的还是比做错的多。" </wbr></p> <p style="TEXT-INDENT: 2em"> </p> <p style="TEXT-INDENT: 2em">MySpace Tech Roster</p> <p style="TEXT-INDENT: 2em">January 16, 2007</p> <p style="TEXT-INDENT: 2em">By <a href="http://www.baselinemag.com/author_bio/0,1541,a=4895,00.asp"><font color="#78afd3">David F. Carr</font></a> </p> <p style="TEXT-INDENT: 2em">MySpace has managed to scale its Web site infrastructure to meet booming demand by using a mix of time-proven and leading-edge information technologies. </p> <table cellspacing="0" cellpadding="0" width="100%" border="0"><tbody><tr><td bgcolor="#333333"> <table cellspacing="1" cellpadding="4" width="100%" border="0"><tbody> <tr bgcolor="#f7f7e9"> <td valign="top">APPLICATION</td> <td valign="top">PRODUCT</td> <td valign="top">SUPPLIER</td> </tr> <tr bgcolor="#e0e0e0"> <td valign="top">Web application technology </td> <td valign="top">Microsoft Internet Information Services, .NET Framework</td> <td valign="top">Microsoft</td> </tr> <tr bgcolor="#f7f7e9"> <td valign="top">Server operating system </td> <td valign="top">Windows 2003</td> <td valign="top">Microsoft</td> </tr> <tr bgcolor="#e0e0e0"> <td valign="top">Programming language and environment</td> <td valign="top">Applications written in C# for ASP.NET</td> <td valign="top">Microsoft</td> </tr> <tr bgcolor="#f7f7e9"> <td valign="top">Programming language and environment</td> <td valign="top">Site originally launched on Adobe's ColdFusion; remaining ColdFusion code runs under New Atlanta's BlueDragon.NET product.</td> <td valign="top">Adobe, New Atlanta </td> </tr> <tr bgcolor="#e0e0e0"> <td valign="top">Database </td> <td valign="top">SQL Server 2005 </td> <td valign="top">Microsoft</td> </tr> <tr bgcolor="#f7f7e9"> <td valign="top">Storage area network</td> <td valign="top">3PAR Utility Storage</td> <td valign="top">3PARdata</td> </tr> <tr bgcolor="#e0e0e0"> <td valign="top">Internet application acceleration</td> <td valign="top">NetScaler</td> <td valign="top">Citrix Systems</td> </tr> <tr bgcolor="#f7f7e9"> <td valign="top">Server hardware</td> <td valign="top">Standardized on HP 585 (see below)</td> <td valign="top">Hewlett-Packard</td> </tr> <tr bgcolor="#e0e0e0"> <td valign="top">Ad server software </td> <td valign="top">DART Enterprise</td> <td valign="top">DoubleClick</td> </tr> <tr bgcolor="#f7f7e9"> <td valign="top">Search and keyword advertising</td> <td valign="top">Google search</td> <td valign="top">Google</td> </tr> </tbody></table> </td></tr></tbody></table>Standard database server configuration consists of Hewlett-Packard HP 585 servers with 4 AMD Opteron dual-core, 64-bit processors with 64 gigabytes of memory (recently upgraded from 32). The operating system is Windows 2003, Service Pack 1; the database software is Microsoft SQL Server 2005, Service Pack 1. There's a 10-gigabit-per-second Ethernet network card, plus two host bus adapters for storage area network communications. The infrastructure for the core user profiles application includes 65 of these database servers with a total capacity of more than 2 terabytes of memory, 520 processors and 130 gigabytes of network throughput. <em>Source: MySpace.com user conference presentations</em></wbr></wbr>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值