管理信息系统阶段开发阶段难度最大的是?

开发一个 Windows 级别的操作系统难度有多大_百度知道
开发一个 Windows 级别的操作系统难度有多大
提问者采纳
只是简单修改下别人的系统真没啥技术含量看你怎么开发了如果从0开发,windows抗衡级别的,你一辈子都开发不了。如果想开发个类似于跟谷歌,你啥都干不了 如果是根据windows之类的现有的系统开发,不给你任何源代码,不过几乎没啥意义,难度不大,难度不小
来自团队:
其他类似问题
为您推荐:
操作系统的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁手机操作系统开发难度大吗,是指完全新开发一个手机操作系统
[问题点数:20分,结帖人yuji821]
手机操作系统开发难度大吗,是指完全新开发一个手机操作系统
[问题点数:20分,结帖人yuji821]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2013年6月 Linux/Unix社区大版内专家分月排行榜第二2013年5月 Linux/Unix社区大版内专家分月排行榜第二2013年3月 Linux/Unix社区大版内专家分月排行榜第二2013年1月 Linux/Unix社区大版内专家分月排行榜第二2012年12月 Linux/Unix社区大版内专家分月排行榜第二2012年8月 Linux/Unix社区大版内专家分月排行榜第二2011年12月 Linux/Unix社区大版内专家分月排行榜第二2011年10月 C/C++大版内专家分月排行榜第二2011年10月 Linux/Unix社区大版内专家分月排行榜第二
2012年6月 C/C++大版内专家分月排行榜第三2012年6月 PHP大版内专家分月排行榜第三2012年5月 C/C++大版内专家分月排行榜第三2012年3月 Linux/Unix社区大版内专家分月排行榜第三2012年2月 Linux/Unix社区大版内专家分月排行榜第三2011年11月 C/C++大版内专家分月排行榜第三
2012年8月 C/C++大版内专家分月排行榜第三2012年7月 C/C++大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。后使用快捷导航没有帐号?
海量之道:一切尽在控制
查看: 8242|
评论: 0|原作者: ppchen、mikewei|来自: 明道如费
摘要: 人们本可以控制自己的命运,如果我们失去了控制,那错的不在命运,而在于我们自己”――莎士比亚作为一名海量互联网服务的架构师,你在如何运营着你的服务,是在主动地掌控它的演进,还是在被动地救火打补丁呢?一名 ...
人们本可以控制自己的命运,如果我们失去了控制,那错的不在命运,而在于我们自己”――莎士比亚&作为一名海量互联网服务的架构师,你在如何运营着你的服务,是在主动地掌控它的演进,还是在被动地救火打补丁呢?一名优秀的架构师,理应是前者,他的服务所运行的每个逻辑都已经过仔细设计,系统每个模块都在预计的性能运转,并时刻准备好应对内部外部各式各样的异常和变化。而对后者的架构师,他有的或许只是一个恰好能跑的系统,在一切正常的情况下可以正确地运行,一旦出现异常就无法预计了,需要时刻准备着人工应对各种突发故障。在互联网海量服务系统的设计与运营过程中,架构师需要掌握“一切尽在控制”的理念。“一切尽在控制”这个看似简单的概念,其实对架构师在技术积累的深度和广度上都提出了很高的要求。核心业务进程的cpu占用是多少?一套cache服务的命中率是多少?系统架构是分两层还是三层?集群所用交换机上联带宽用到多少?整体系统的性能容量是多少?整套系统的瓶颈会在哪里?在设计阶段,架构师就必须对这些问题的答案了然于胸。很多遭遇服务失控问题的架构师,其实对并未对“一切”这个概念充分理解,“一切”包含哪些?下面从几个典型的维度讲述。&1. 从功能到架构对系统的设计一般是从功能设计开始,明确需求优先级和问题边界,确定主要功能模块与核心业务流程。但这往往只是简单的第一步。设计满足各项工程及运营需求的系统架构才是真正的难点。这些需求通常包括:处理能力(吞吐量、延时、容量等)、伸缩性(scalability)、容错性(fault tolerance)、扩展性(extendability)、安全性等等很多非功能性需求。这里的每一项对架构师来说都是有力的挑战,任何一项的失控都可能导致严重的后果。在海量服务的环境下,对性能不可控的结果可想而知;不良的伸缩性可能会让服务的运营异常艰难,过早夭折;容错性的失控无异于给服务可用性埋下了一枚定时炸弹……成功的设计一定是将这些方面都控制到位的设计。&2. 从测试性能到掌控性能性能是control出来的,不是try出来的。我们在设计、实现一个后台服务时,在写第一行代码之前就应该大概知道系统的性能容量是多少,而不是等压测。Google资深架构师Jeff. Deans如是说:Important skill: ability to estimate performance ofa system design--without actually having to build it!要做到能掌控系统的性能,架构师需要对整个系统各个层面有深刻而精确的认识。对于系统内部或系统所依赖的每个组件、模块或外部系统,不但需要了解其接口,还要知晓其内在实现,未必要看源代码,至少应能够在一定抽象层面上进行把握。对于整个系统的认识,不仅是定性而且要定量。每位架构师的心中一定也有一张类似这样的data sheet:在架构设计阶段,通过这些数据架构师就已经能让设计的系统在大脑的虚拟机中跑出结果了。举个简单的例子,比如,我们设计一个基于udp协议的批量好友资料拉取服务,每个好友资料40字节,用户发起的请求量为30万次/秒,4亿资料用户,平均好友数20个。架构师可以很快分析出业务模型,包量300K/s,流量2Gbps,存储量16G,资料若使用内存hash索引组织,hash查询量6M/s。通过量化性能分析,随即得出系统瓶颈在于CPU,主要消耗在hash查询,假设先不考虑容灾冗余,可使用8台4核处理器8G内存的box组成集群来支撑。不需要实现,架构师就可以模拟出运行时的场景,负载均衡到8台机器上,每台机器这时的cpu跑在大约60%,内存使用约60%,包量40K/s,流量30Mbps。&3. 从正常到异常正常情况的处理一般较少出现问题,但在异常情况下,是很容易出现失控的地方。雪崩问题是一个典型的失控的例子,当负载超过正常的系统性能容量时,整个系统的可用性就崩溃了。当系统在“非正常状况下”运行时,架构师应当让整个系统还是在控制下运行,而不是随机的、无序的。这里所说的“在控制下运行”,与另一个海量架构理念“柔性可用”是相呼应的,根据异常发生的具体情况,结合服务需求优先级,提供给用户一个控制范围内的尽可能好的服务。容错的设计是必备的,对于一个服务系统来说,绝大部分的异常都应是常态。在做系统设计时,首先要能考虑到所有的非正常情况,进而分析后确定架构方案应该cover的范围和程度。在设计系统性能容量时,是否有考虑请求量异常增长时的影响?何时启用柔性降级服务,何时启动过载保护?在请求量异常增长x2/x5/x10时,服务的体验分别是怎么样的?单机故障对服务有什么影响,一个机架呢,一个IDC呢,一个ISP呢?这些都是架构师在设计时需要清楚把握的。&4.从单机到集群海量互联网服务系统是一种分布式系统技术的典型应用,它与传统桌面软件的最大不同就在于它不是运行于一台计算机而是一个集群。这个区别不仅仅是规模的变化,更是系统设计方法的根本转变。设计一个集群系统所面临的困难比单机大得多。一个单机系统需要考虑哪些因素? CPU、内存管理、外存、网络、OS、C RunTime等。这些单机技术发展数十年到今天已经非常成熟,单机上的资源访问多是高效同步化的操作,对架构师来说相对较容易把握。而到多机集群环境下,情况就变得复杂得多:机器、机架、电源、IDC、UPS、专线、电力、散热、地域、内网、公网、火灾、地震,这些因素无不影响着系统的设计和运营。对于一个数千台box的集群,几乎每天都会发生单机故障,每周都有网络波动,每年都会发生数次IDC级故障,集群系统的设计需要能正常应对这些不正常的情况。在集群环境下,很多资源访问都变成远程访问,丢包、延时等问题造成访问不可靠因素大大增加,同步访问也更多地替换为异步处理,数据需要分割到多台的机器分布式存储和访问,这些都增加了系统的复杂性,要求架构师不能只以传统的软件设计模式思考,更多地要考虑box之间的交互与关系。这里很多因素,比如IDC/机架/专线/内网,是传统软件设计无需太关注的部分,而在集群系统中却是非常重要。举个现实的例子,IM通信后台系统作为一个重要的服务已经运营了多年,但在以往的系统架构设计上,并没有充分考虑IDC内网拓扑的情况以及实际物理部署的架构,随着IM业务的持续增长,系统开始出现由于某些交换机流量过载而影响box间网络通信的故障,这正是由于老的设计忽视了对物理网络层的控制。在新一代的IM通信系统架构中,充分考虑了物理网络拓扑及部署架构,网络上box间的通信变得更为有序,每一层交换机的流量都在架构师的控制之中,充分利用了内网带宽资源,为支撑亿级海量用户服务建立了基础。&5. 从系统到服务我们提供的是服务而不是软件或系统,这一点是每个架构师应该牢记于心的。不管你的系统使用的是何种先进技术,有着怎样的精妙设计,决定其优劣的永远是它能最终提供给用户什么质量的服务。优质的服务包括两个方面:1.强大、有效的功能,良好的体验;2.很高服务质量、可用性、性能等。这两个方面都是优质服务的组成部分,犹如一个人的左右手,他们是不应该产生PK的。你是否遇到过如下的故事场景:场景1:架构师与产品经理的PK,产品经理说:一二级的需求我们需要在第一个beta版本全部实现;架构师说:我们需要再砍30%的特性,否则时间上无法安排,我们需要花不少时间解决高可用和一致性的问题。场景2:事故现场,某系统出现严重故障,服务质量急剧降低,5分钟内发现了问题,架构师、开发、运维的同事都来到了现场,架构师在整体协调这个事情,首先架构师花了30分钟看日志、视图、系统状态等信息和调试程序,没有找到问题原因,最后架构师决定回滚,回滚后服务恢复正常。架构师精力常常会focus在高性能、高可用、高质量、可扩展、一致性等主题上;架构师碰到crash,脑子里第一时间想到的是溢出、访问违例、系统出错等。但我们的目的是给用户提供优质的服务,所有的行为都应该围绕用户服务展开,没有以用户、服务为目标的努力都很可能是无效的,最终很可能变成了自娱自乐。真正优秀的架构师应该是有“人性”意识的,他能够切身考虑用户的感受,从用户的角度分析问题,再分解出技术、架构、IT设施等技术方案。人性化体现了架构师对服务更高水平的控制。&“一切”体现出对架构师经验技术广度的要求,另外一个方面,“尽在控制”则反映了对架构师把控能力和技术深度的要求,如何才能真正做到“可控”?下面谈几点掌握控制力的核心要素。&1. 尽量简单简单是对系统控制能力的保证。一个系统越是复杂意味着越难以控制。Keep It Simpleand Stupid,是无数系统设计哲学中都反复提到的一条经典原则。架构师在做系统设计时,时刻要注意控制其复杂度,有很多经验原则可以参考,比如:80/20原则,用20%的复杂性来实现80%的优先需求;先实现再优化,必要时才优化,优化的好处时常小于复杂化带来的坏处;不写目前跑不到的逻辑;用资源换复杂性……。目标只有一个,将复杂性控制在尽可能小的范围内。对于那些难以避免的复杂性,也有一些方法进行优化和控制。我们一直所提倡的大系统小作的方法论,复杂的系统一般可以通过分层、分模块的方式将其分解成关系清晰、松耦合的子系统,使得每个子系统的相对简单可控,这样整体的复杂性就大大降低了。还有复杂性隔离,将复杂的逻辑隔离在一个尽可能小的范围内,提供简单的接口以与外部解耦,从而防止复杂性扩散。架构师控制复杂性的能力最能反应其水平,普通的架构师需要优秀的开发人员,而优秀的架构师只需要普通的开发人员。&2. 精确地把控架构师对系统的控制能力很大程度上依赖于其对系统从上层到底层的深刻认识,并且这种认识不是定性的、模糊的,而是定量的、精确的。这也是架构师区别与一般技术高手的能力,对技术问题的认识不是仅停留在理论上,而是有着工程上的经验,实践上的把握。比如,磁盘的访问效率与访问模型的关系,对任何一个有计算机学习背景的人,这都不是一个难题,但对架构师则需要掌握更工程化的细节:各种访问模型下磁盘的实际IO带宽有多少?延时有多大?目前的业务进程模型对其会有多大影响?目前使用的内核文件系统与IO调度对其会有多大程度影响?又比如,有经验的程序员都知道,memcpy会影响效率,系统调用的性能不高,但作为架构师则不仅要知道这些性能风险,还要清楚它们的性能到底有多坏,memcpy在不同条件下的性能指标如何?不同系统调用的调用性能如何?在我的业务场景中它们是否真的是主要影响因素?&3. 完备地设计可控的另一个重要因素,在于架构师考虑问题的完备性和严谨性。在设计一个问题解决方案时,如何保证能应对问题的各种情况,任何的疏漏都有可能导致最后服务的失控。前面提到的雪崩问题就是典型的设计完备性上的缺陷。那如何做到设计的完备性,是否只要注意小心谨慎就可以了呢,这就是架构师另一个重要素质,用严谨的方法论来保证完备性。提一种在分析设计时常用的方法,将问题分解为正交完备的子情况,对每种子情况进行枚举论证。举个简单例子,我们设计的新版通信服务涉及到新老版本兼容的问题,我们可将问题根据通信方A是否新版本,通信方B是否新版本,通信通道是否新版本几个维度进行全排列,从而分解成正交的一系统子问题,对每个子问题考虑设计的正确性,这样也就保证了整个兼容方案的完备性。双重验证是另外一种常用的方法论,它是指对一个重要的结论或系统使用两种独立的途径进行验证,从而避免错误的方法。比如。对一个集群服务使用总体数据统计比对,和抽样请求详细对帐两种方式验证服务的正确性。&4. 合理地tradeoff&鱼与熊掌不可兼得,tradeoff是架构师在做系统设计时最常做一部分工作,同时也是比较有难度的那一部分。合理的tradeoff有事半功倍之效,可大幅提高系统性能,而盲目的tradeoff将会事得其反。tradeoff就像一个天平,需要将左右的因素控制在一个平衡的位置上。这里有两个关键点,一是需要对系统的透彻地理解,能够抽象出问题模型,认清系统设计的几个主要可变因素及其对整体性能的影响;二是正确认识需求及其优先级,根据真正的需求来确定各可变因素的平衡点。如果第一点做不到,则架构师往往意识不到tradeoff,而如果第二点认识不好,则架构师可能会在做tradeoff时无从下手,左右为难。以IM资料存储系统架构设计为例,这个存储系统需要支撑数亿IM用户的资料的存储及访问,对服务质量要求很高,它包括几个主要目标:高性能,能支撑亿级用户的访问;处高可用,服务质量的基础,应能达到4个9以上的可用率;良好的伸缩性,能适应业务得快速增长;分布性,能在多个地区进行部署提供就近服务;数据一致性,各个数据副本间需要保证一致。然而,要全部高度达成这些目标是困难的,甚至是不可能的。比如,根据分布式系统设计中的CAP原理,一致性、可用性、可分布性三者是互相制约的,三者同时只能完全满足其二,必须进行tradeoff。对IM服务来说,它作为一种基础通信服务,对可用性的要求是最高的;可分布性的重要性其次,多地区多IDC分布的要求由于资源、性能因素的制约而不可回避;一致性排在最后,这也是由用户对服务的需求决定,IM资料服务并不像网上银行、电子商务类服务一样对数据一致性要求那么高,在一些情况下发生用户短时间内读到不一致的数据对用户的伤害是较小的(比如好友修改资料后,自己在短时间内还是看到老的资料)。所以在这个tradeoff中,架构师选择对一致性使用“最终一致”(eventuallyconsistent)的设计方法,牺牲一定的强一致性体验,从而保证高可用性、可分布性目标的达成。我们经常提到的有损服务的设计理念,其核心也是tradeoff,关键是保证tradeoff天平两边都是在控制的范围内,一边是代价、成本、性能,一边是一致性、体验,决不能是片面的“损”,或者盲目的“损”。&海量互联网服务设计是一个富有挑战也很有吸引力的领域,它所涉及的技术面十分宽广,相关技术的发展演进也是相当快速,掌握“一切尽在控制”的基本理念和原则将帮助架构师在海量服务设计的道路上走得更高更远。&(END)
上一篇:下一篇:开发一个 Windows 级别的操作系统难度有多大_百度知道
开发一个 Windows 级别的操作系统难度有多大
提问者采纳
再加上维护Linux各个分支的社区。你说有多难目前全世界能做到这件事的公司屈指可数,苹果:微软,暂且算上谷歌
其他类似问题
为您推荐:
其他1条回答
非常大,费用方面据说在300亿美元以上
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁我们经常碰到一个问题:母亲和老婆掉到水里,你先救哪个?这个问题很难回答,我们从GOF设计模式与系统的角度来解剖这个问题。GOF设计模式分三种类型:结构型、创建型和行为型,这三者类型其实对应着一个系统的三个阶段:设计阶段、创建阶段和运行阶段。结构型模式指出如何设计出系统的结构,也就是一个系统的孕育,如同人的十月怀胎过程。创建型模式指出系统起初如何被创建,也就是宇宙大爆炸前一刻,是系统从纸上落地,如同人的出生和养育,是从无到有的创建过程。行为型模式是针对系统创建后进入自我运行阶段,这时再也无需创建者和设计者干预,如同人的成年结婚生子。也就是宇宙形成后的运行状态。下面进入具体论证一下:(1)结构型模式有Facade Proxy 桥模式 适配器Adapter和组合模式等等,这些模式共同点是针对代码结构如何设计,比如适配器模式是设计出一个适配类,能够将原来两个不匹配的类能够和谐统一,结构上可能有三个类,一般结构关系可以使用UML的类图表达;组合模式更是一种代码结构组合,将两个类组合在一起;这是一种组成结构的关系。有结构就有关系,这也是关系数据库为什么能表达结构一样,设计表结构Schema实际是设计结构关系。在建筑领域,土木结构的设计需要精确的设计阶段,建筑绘图就是一种结构或架构设计,它类似我们的结构型模式。(2)创建型模式有工厂模式等,创建模式指出一个系统从设计图纸到落地运行如何创建的过程,正如一个建筑从图纸到落成需要经过施工创建过程一样。工厂模式指出专门有一个工厂类负责类的创建。(3)行为型模式有Command 职责链 观察者等模式,这些模式都是针对系统进入自运行阶段时,系统内部如何运行的,比如Command模式是指从客户端发出请求打包成一个命令,由后端根据命令指派相应的模块响应处理。而职责链类似于过滤器,可以对请求命令进行一个个过滤拦截;观察者模式则是对运行时的状态改变的及时响应,发展为后来的Reactor模式或异步模式,因为是针对系统运行阶段的编程,编码时需要联想到系统运行的状态,这对于没有系统运行经验的程序员比较难,一般程序员比较适合顺序编程,顺序编程是一种结构编程,那么现在我们提供一些框架能让顺序编程的代码在运行时异步运行,这些都是在认识到系统不同阶段的边界后才有的发展。因此,认识到一个系统有不同的逻辑边界对于我们认识世界更加重要,系统的结构设计、创建阶段和运行阶段是三个严格不同的逻辑世界,如同天上 人间和地狱三界不同一样。有了系统边界认识,对于解答本文开始的问题就非常容易,母亲和老婆掉水救哪个?母亲是创建养育自己,而老婆是自己成年后进入自运行生活阶段的重点,母亲属于创建者,是创建阶段的重点,而老婆是运行阶段的重点,将这两个重点跨域边界比较显然是不符合逻辑的,提这个问题的人没有系统逻辑分界。再比如:老板大还是公司规章制度大?老板确实是公司制度的制定者,实际属于创建阶段的老大,但是制度一旦颁布,进入运行阶段,老板自己也要服从制度管理,这时是制度大。还有一个经济学问题,经济中重要两个角色,一个商品需要生产者和消费者,那么生产者重要还是消费者重要呢?过去计划经济时期,我们抓生产,结果经济还是没有抓上去,国营的一个个生产厂家都倒闭了,其实还是没有从系统阶段边界来认识这个问题,生产者属于经济系统创建阶段的老大,只有大量建立生产工厂,才能创建出各种商品;但是当经济进入自运行阶段后,供大于求,经济还是会崩溃,这时消费者就是老大了,只有消费才是驱动经济的关键,这也是凯恩斯等经济理论的核心基础,也就是为什么西方国家鼓励贷款提前消费的逻辑基础。扯了这么多咸蛋,主要是想说明,其实设计模式不只是对于编程有作用,而且对于自己的三观也有帮助,因为开发者开发出一个软件系统,麻雀虽小,五脏俱全,其基本原理不亚于上帝创造世界。如果一个程序员只知道数据结构和算法,却对一个系统的设计 创建和运行等阶段没有基本逻辑认识,那么很显然会迷失在细节中失去方向。从老子有无哲学观点看:数据结构算法和功能属于“有”,看得见摸得着;而系统阶段边界属于“无”,虽然无形无态,但是自然之道是无生有,我们不能因为首先学习了有形的知识,却忽视了无形的思想。[该贴被banq于 09:43修改过]
同意。人就是从四种脱氧核苷酸这四种结构开始构建的
“母亲和老婆掉进水里,先救哪个”
母亲问儿子 或老婆问丈夫,都是想知道他心里的地位高低。但目前和老婆的地位可以说,是两个不同的高地位。
按照banq的说法,就是各属于不同边界之中,在地位的高低之争上,没有可比性。
马克思教导我们,要用辨证唯物思想去看待问题,也就是将问题放到具体的环境和时间段内,去分析下定论。那这时候,我们需要问在什么时候,什么处境下,母亲和老婆同时掉进水里。那添加上条件,会出现N种版本的电视剧,你的答案就不会轻易决定了。
设计模式是对系统不同事情和处境下,解决问题思路的总结。那么,只有我们很好的理解当前系统和业务的要求,才能选择或者创造出较佳的思路或模式去解决。
让女朋友来回答这个问题。
其实上面的回答是,也许要换个角度换个人来回答这个问题,最好了。比如:女朋友回答,当然先救妈了,不孝的人我也不喜欢,这样也许能让大家都高兴。注:总感觉anycmd的头像太....这个了。
最佳分辨率
OpenSource
Code & 2002-15

我要回帖

更多关于 管理信息系统阶段 的文章

 

随机推荐