当前位置: 首页 > news >正文

网站开发的实训周的实训过程app制作公司

网站开发的实训周的实训过程,app制作公司,济南网站seo,软件项目管理方法在上一篇文章《饿了么技术往事#xff08;上#xff09;》中#xff0c;我介绍了饿了么最早期 All in One 阶段的架构#xff0c;以及第二阶段业务系统拆分与团队运营的一些思考#xff0c;以及我对于架构师职责的感受#xff0c;接下来我会详细介绍饿了么全面服务化的架…在上一篇文章《饿了么技术往事上》中我介绍了饿了么最早期 All in One 阶段的架构以及第二阶段业务系统拆分与团队运营的一些思考以及我对于架构师职责的感受接下来我会详细介绍饿了么全面服务化的架构演进历程。 一、中间件 业务线的工程师深陷到快速的迭代和业务复杂性当中业务的快速增长、外卖行业午晚高峰业务特点带来的并发挑战领域拆分后所需的服务体系框架支撑责任自然落到了中间件团队。 当时中间件团队主要负责的三件事就是发布系统、SOA框架、统一的数据访问层。 发布系统 外卖业务周末的单量通常比工作日要高但是工作日事故率要高于周末为什么变更是万恶之源周末很少发布。所以发布系统接手管控取消手动发布的模式解决发布回滚的问题通过发布自动化提高效率的同时回收服务器的权限降低安全和稳定性的隐患。当然发布系统的作用远不止于此后续这个体系及其团队充当起了基础架构演进的核心角色。这个是后话了。 SOA 框架 SOA框架是支撑业务服务的骨架。和多数类似框架一样为应对复杂的服务体系服务注册和发现常见的基于Design for failure的设计熔断、限流、舱壁、多集群隔离这些功能都一样。但是较特殊的地方在于——我们有两套SOA框架Java 版和 Python 版。前面提到我们有两个主要的技术栈 —— Java 和 Python使得我们凡是需要 SDK 的地方都需要支持两种语言毫无疑问会对增加中间件团队负担。在当时确实是个难题这个现在当然也有解后面会提到。 体会和教训——是否应该统一技术栈 关于是否应该统一技术栈没有一个标准的答案。每个公司的技术栈和技术体系有其形成的背景如同架构一样不放在上下文里面讨论合理性往往没有结果烟囱型也好、L型也好只要是适合自己的技术和架构就好。 Python 技术栈当时已经支撑了很多核心系统推翻现有系统换技术栈的时间成本不可忽视。而当时市场竞争非常激烈对于饿了么这样的创业公司数据、时间和人是最宝贵的。而且有一支能力非常强的 Python 技术团队从里面抽调部分工程师支撑 Python 技术栈的中间件建设也不会带来额外的人力成本。维护两个技术栈中间件团队的负担会增加但是换取的是时间和优秀的工程师还是划算。这些 Python 工程师里面负责业务系统的很多人后来也成长为独挡一面的角色跟上了业务快速增长的步伐后续会有相关的内容分享。而负责中间件的 Python 工程师他们的一些创造性实践也为我们后续架构演进奠定了基础。 好的技术体系和架构起决定性的不是技术栈最终还是优秀的工程师。 数据访问层 因为多技术栈的存在DAL 层选择了中心化的方案而没有采取 SDK 。统一的数据访问层为后续分库分表、限流保护、多数据中心上线后的数据纠偏打下了基础。为了保证系统有足够强的吞吐能力DAL 层采取了异步 IO 的方案来处理出入流量中间件的最高境界是大家会忘记它的存在DAL 层涉及到底层和数据库的交互尤为敏感而这个中间件几乎做到了没有出现过重大事故也很少有开发吐槽这一层的问题。后来这个一直稳健的团队在饿了么多数据中心建设当中负责了核心的流量调度及容灾切换管控体系。大家都习惯了叫 DAL很多人不知道这个系统叫 Athena。 基于 DAL 的上线DBA 和 DA 这个时期就忙着给各个团队做分库分表的事情 按业务功能领域切分——拆库 按照访问频率、动静态属性等等规则——垂直分表 基于Hash Partition需要注意的是避免热点和Rebalance带来的成本—— 水平Sharding 总之就是选择合适的 Partition 策略降低数据库单个实例的负载。存储后来能支撑住千万级单量除了上游队列的削峰、缓存的缓冲、数据库读写分离以外也得益于适当的 Data Partition 策略。 二、大前端 其他团队还在拼命追赶业务、填坑补课的时候大前端团队满足业务需求的同时还为开源社区贡献出了非常优秀的产品 Element。就在大家认为这支团队会继续在前端领域上一骑绝尘下去的时候令人没有想到的是这个团队几年后会爆发出巨大的潜力成为整个架构体系升级中一个举足轻重的角色。为什么叫大前端因为他们和传统的前端团队做的事情不太一样后面会讲到。 体会和教训——找到优秀的工程师多么不容易 招聘优秀的工程师持续招聘优秀的工程师这是一句正确的废话。但是有多难带过团队的应该都深有体会特别是你的公司还没有自带光环的情况下。优秀的工程师会吸引来更多更优秀的工程师反之亦然面试这个过程是双向的尤其是优秀的工程师。有业务压力的时候主管很容易扛不住降低要求。当时大前端团队校招淘汰率还是挺惊人的换来的是这个团队的工程师很高的技术素养和基本功为后面成为一个真正的全栈团队打下了的基础。 Leader的个人能力决定了他她是这个团队的地基还是天花板。 三、大数据 基于 Hadoop、Spark、HBase 的经典大数据架构这个时候也搭建起来了因为是自建的数据中心所以这些产品都需要有一个专业的团队来运维因此大数据也有了自己的运维和中间件团队。在这个阶段在线和离线数据同步、数据治理上面还不完善因为产品化还在路上很多工具缺失导致很多团队都要自己直接去从数仓取数不得不维持运营团队支撑定制化的手工取数需求。各个团队喊得最多的就是大数据的人不够想要自己做。核心还是业务发展太快。后面随着大数据团队逐渐壮大更多强援加入各个产品相继成熟才得以缓解。 四、风控安全 这是一个不得不说但是也不能说太多的团队所以这部分只能务虚一些任何一个到了一定规模的企业风控安全团队是“真”底线。其他技术团队在面对这个同样是负责技术的团队面前有时候确实也挺一言难尽的这个时候高层的支持至关重要。尤其是从 0 开始建设这个团队对内的扫盲和对外风控一样艰难。 如果说一个技术公司系统毁了有什么还能留下来就还能重建那肯定是数据现在可能还要加一个算法模型。有什么缺失了随时都可能垮掉那肯定是风控安全。 饿了么的这支风控安全团队对内、对外、对线上、对线下、对其他……都面临很多挑战和冲突堪称业务专家的羊毛党和无孔不入的黑客确实令人叹为观止。而我们的风控也经历了从开始的粗粒度约束、到依赖业务规则针对各种补贴、账期等场景兜底、再到依赖算法模型实时风控主动拦截的阶段。 如果大家身边有做风控安全的同学请珍惜哪怕他们有时候看到系统到处是窟窿的时候脾气暴躁。因为他们整天面对这么多黑暗面还能对这个世界报以希望。开个玩笑从人道的角度出发这个团队需要定期的心理按摩。 这个阶段我们初尝了算法的威力。一开始只有搜索但是还没有推荐召回系统当时给推荐系统的物理机是我们能拿得出手的最好的物理机其他业务系统分配的大都是虚机。系统上线以后效果、转化率都还不错。之后不久这一待遇被另一个团队承包——负责配送履约的智能调度团队大数据、机器学习、算法模型需要充分发挥功效需要长时间紧贴业务、深刻理解业务在智能调度领域我们也做过不少艰难的尝试、吃过不小苦头直到我们有了自己的算法专家团队。 这个阶段我们还经历了第一次外卖行业的大促——517大促让大家真切感受到了这个市场的巨大潜力同时系统的一系列短板也暴露无遗除了积累了大促的经验以外更大的收获是让我们看到架构还有很大的升级空间。还收获了一支全链路压测团队他们在今后架构升级以及系统质量、容量等稳定性保障过程中扮演了关键角色。 在饿了么技术往事系列文章的开篇我提到了饿了么的技术体系经历了以下四个阶段 核心系统 All in one 的早期架构 以系统领域化拆分、业务系统和中间件等基础设施分离为基础的全面服务化的架构 随着自动化平台、容器调度体系成熟治理从传统运维向 DevOps 转变的基础设施体系 多数据中心体系基础上的 Cloud Ready 架构成型。 现在我们前两个阶段基本完成了开始了相对而言最艰难的阶段了…… 第三阶段脆弱的系统苦逼的运维 这个阶段我们的业务已经发展到一定规模系统的长时间抖动或者崩溃很容易上热搜尤其是饭点时段。发生事故时候冲在第一线的除了各业务线的工程师还有运维团队他们往往是最先响应排障冲在第一线的团队。这个阶段说是靠他们生扛顶住了稳定性的压力也不为过日常基础设施部署、事故发生时的应急响应、事故发生后的基础设施优化和改进措施落地他们都承担了很多。 事故的教训也让我们学会了遵循一系列业界积累下来的设计原则为架构演进到下一阶段打下基础。 业务领域拆分、基础设施和业务系统分别建设后给业务快速发展解绑了。但是包括稳定性在内的一系列挑战依然需要面对 基础设施部署的标准化 系统的生命周期怎么管理 每次故障都是昂贵的学费故障可以避免吗 复杂性带来的挑战团队里面几乎没有人面临过这个体量的业务、这个复杂度的系统。快速交付的同时如何保证系统的稳定和健壮 我们的系统架构接下来如何演进 DevOps 因为云上资源的灵活性我们在云上搭建了两个测试环境alpha作为开发环境用于软件工程师日常开发调试beta作为集成测试环境用于测试工程师完成系统交付上线前的集成、回归测试。费了九牛二虎之力才达成所有团队的共识推动beta环境的系统和数据的完整性建设。在这里面发挥重要作用的除了各个业务的开发、测试、运维团队还有一个就是之前提到的负责发布系统的团队这个团队不仅仅提供了一个简单的发布系统基于持续集成和持续部署实现的开发、测试、生产环境相似化是我们的系统架构继续演进的开端。 技术团队职责细分后运维团队提供了保姆式的服务这把双刃剑的另一面就是开发团队很容易形成惰性对自己的系统管生不管养对系统的容量、治理关心不够因为有运维团队。这就带来很多问题代码不是运维工程师写的但是有些团队系统甚至是运维工程师部署的。因为开发团队最贴近业务需求需求变更可能带来未来的潜在容量风险他们比较有发言权而容量水位的现状反过来是运维团队更了解。因为这个时候很多基础设施运维还没完全自动化所以难以统一化、标准化每个运维工程师都有自己的运维风格日常排障上有时候需要开发和运维一起才能完成。 此外只生不养的思维方式客观上也容易造成算力成本变成糊涂账。这个时候开发、部署、系统运营治理角色的不统一带来的问题就会凸显。 应用Owner要成为名副其实的Owner需要有应用的全景视角对应用生命周期的把控能力。这个阶段开始推动从虚拟化到容器化的转型发布系统从一个简单的CI、CD的体系延伸到了算力和调度的领域。基于一系列运维自动化工具的建设和全面容器化调度的实施从而带来标准化的运维才能把开发工程师应用的Owner推到应用完整的生命周期运营的位置上胜任DevOps的角色。这个时候事实上底层的算力平台已经具备云上PaaS的雏形了。 在这个过程中也做了不少尝试比如为了提高 alpha/beta 这两个测试环境的基础设施交付效率有过一段时间基于 slack 的 ChatOps 实践工程师都比较欢迎还有过 Infrastructure as Code 和 GitOps 的实践很可惜当时各方面条件和时机都不够成熟没有持续推广。 体会和教训——DevOps alpha 和 beta 环境 工程师在开发机上自测是不是就可以了“在我机器上是好的”这句话估计开发工程师都说过或者听过在开发阶段提供alpha环境目的就是为了开发、测试、生产环境的尽量接近避免由于开发、测试、生产三个阶段由于环境差异巨大带来的问题。解决不了“在我机器上是好的”这个问题没有办法大规模顺利上云。工程师自己的电脑某种程度上是一台“mommy server”上面运行着需要的一切环境而且每个工程师的祖传环境还不一样这类环境在生产上是不可复制的。 Build Release 怎么做到高质量快速交付保证系统的稳定 在快速迭代的同时做到快速试错、快速纠错、快速回退。需要发布系统做到每个编译的版本、每次发布的版本像代码一样可回溯可跟踪。关键在于build和release是immutable的 首先build和release有唯一的ID才可追溯可回滚 其次是配置分离把和环境dev/test/product相关的config从代码中剥离开来否则系统很难迁移更不用说大规模上云。第一反应可能是把和环境相关的config写在xml或者yaml文件就可以了但是这些文件也是代码。 类似的将这些随环境变化的config写在发布流水线的脚本里面都不是彻底分离的方式。因为发布环境会发生变化可能将来有更多的测试环境、更多的数据中心、每个数据中心里面可能还有多泳道。 因此要做到“build once, deploy many times/every where”config要存储在环境的上下文中比如开发、测试、生产环境各自有一个配置中心线上系统拉起的时候先从配置中心拉取配置信息。要衡量环境相关的config和代码是否已经分离看看能不能开源就知道了抛开价值和代码质量不谈。 OPS 接触过传统的运维工程师都知道这是一群责任心极强的人删库跑路铲平数据中心的事情是不可能干出来的虽然有能力……他们维护着系统的底线第一次517大促事故的时候我们靠运维工程师救了大家一命。 但是即使有操作的SOP只要是人执行重复任务的次数足够多总会犯错。而每个资深的运维工程师都有自己祖传的脚本一夫当关万夫莫开但是休假就麻烦了特别是在高铁上信号不好的时候……最佳实践→ SOP → 脚本 → 自动化工具产品沿着这个路径迭代似乎不可避免。 传统的运维工程师角色的演进方向一个是为云上的IaaS/PaaS服务对操作系统和底层硬件有着丰富经验的还是运维工程师他们当中开发能力强的转型SRE对运维产品理解深的可以选择 Technical Product Manager 的角色为云上运维相关平台产品提供解决方案或者凭借丰富的云上系统落地实施经验为各上云企业提供实施方案。 另一个方向由于合规和其他原因还有部分没有上云的企业依然需要基础设施运维工程师。随着云逐渐变成和水电煤一样的社会基础设施运维工程师只写操作系统脚本、实施部署的时代已经渐行渐远了。 架构的历次演进和几次事故或者险些酿成事故的“冒烟”事件有着很大的关系 交易系统崩溃的“饿死了”事故我们开始分离关键路径和非关键路径建设了非关键路径的降级能力。故障应急响应常规三板斧重启、回滚、降级至此完备。 第一次 517 大促入口崩溃的事故是我们核心系统上云的开端。 F5 的 CPU 被打满让我们意识到网关作为入口难以扩展的巨大风险从而基于重新构建的大网关体系取代了 F5 这一层硬件负载均衡。大网关体系是我们多数据中心架构最核心的系统之一。 基于 VIP 的 keepalivedHaProxy 负载均衡体系下各种 failover 和上下游频繁扩缩容过程中相关的稳定性冒烟或者事故频发促成了充当 data plane 的 sidecar  上线这是我们构建类 Service Mesh 架构体系最重要的组件。 核心交换机 bug 引发的数据中心故障对我们下决心建设多数据中心体系有着很大的影响 关于这些事故和架构的故事随着架构的演进后面会逐个展开。 那个时候我们常常自嘲是“事故驱动”型开发Disaster Driven Development。很多工程师除了自己的工位在公司里面最有“感情”的就是整面墙都是监控大屏的NOC作战室大小事故、各种大促活动值守熬夜全链路压测里面常常挤满熟悉的面孔。 体会和教训—— 1事故复盘 事故复盘和定期的故障验尸总结会是一个很好的机制。很容易被忽略的是除了找到事故发生的 root cause还需要从中发现存在的隐患而不是 case by case 的解决问题复盘的目的是阻止类似的事情再次发生必要的时候可以引入业务、产品、技术共同解决。 另一个陷阱是故障复盘变成追责的过程那么参与复盘的各方就很容易陷入互相指责、洗脱责任的怪圈反而忘记了复盘的根本目的也容易浪费大量时间引起不必要的内耗。只要是参与复盘的人都是有责任在身上的为将来的故障负责如果类似事故再次发生或者没有在复盘中发现应该发现的隐患参与的人都难辞其咎。 复盘结果要避免惩罚为目的 —— 除非违反了规章制度底线不排除有些是恶法但不在讨论范围内。否则甩锅、不作为的氛围会日渐滋生自省有担当和有作为的个人或者团队很容易成为吃亏的一方。事故复盘的过程是了解各个团队甚至组织文化的一个视角。 2弹性设计 物流、交易经历事故后各自采取的措施再次印证了反脆弱的设计是我们的应用发展到今天的核心设计思路之一。 传统思路是基于一个上下文可控的理想系统环境下做出的设计尽量避免一切意外的发生。而反脆弱的设计恰恰假设黑天鹅事件一定发生是墨菲定律的信徒开句玩笑话云厂商如果承诺你“我们一定会挂”你一定要珍惜你面对的是一个坦诚相待的乙方值得托付。这不是推责给云厂商这是由云上基础设施的特征决定的大多数场景下云上提供的服务是基于大规模标准化服务器Off-the-shelf hardware构建的虚拟化、容器化基础设施Immutable Servers而不是超高规格的个性化定制独占设备(Snowflake Servers)——无法规模化成本也会大规模上升因此会更注重快速恢复能力水平扩展能力整体的健壮性而不是具体某一个单机 SLA。 所以云上系统更强调算力的抽象CPU核数、内存、网络带宽把数据中心看作一个超级计算机和 CPU 具备纠错机制一样云上基础设施不是不会发生错误只是结合它的“操作系统”比如 Kubernetes提供的是纠错能力比如容器的故障转移 —— 故障容器销毁新容器拉起本质上也是冗余而云上业务系统需要适配这类纠错机制实现自己的自愈 —— 面向云编程 —— 接受短时间的抖动Transient Fault会不时发生的这一个事实。 物流通过补偿机制增强自己的健壮性交易引入 chaos engineering都是基于这个上下文。要求应用是 stateless 或者 disposable 的目的是为了 crash 后能够迅速拉起快速自愈——所以尽量分布式缓存尽量少本地缓存应用拉起时初始化的工作尽量少交给独立的服务干这些事。业界的很多模式实践bulkhead, circuit breaker, compensation transaction, retry都是指向提升系统的弹性resilience足够健壮的系统能够在经历系统抖动后迅速自愈。 故障和意外一样难以避免。我们能做的是减少人祸敬畏生产环境因为一次故障影响的可能是骑手一天的生计、商户一天的营收、用户的一日三餐。同时提高系统的健壮性和自愈的能力在故障发生的时候尽可能的避免演变成更大的灾难及时止损。 黑天鹅 这个阶段我们经历了一个大事故起因就是核心交换机挂了可能有人问不都堆叠的吗不都有主备吗不都自动切换的吗说得都对但是都挂了。因为交换机的一个bug主备切换后备机也很快被网络风暴打挂没经历过我们也不相信。这次又“饿死了”我们只能坐等供应商的工程师抱着设备打车到机房更换这个时候一群人挤在应急响应指挥室NOC作战室里一点办法都没有。 在第一次517大促之后我们就开始第一次容灾尝试了当时采取的是最快最简单粗暴的方案用最短的时间在云上搭建一个了灾备环境并跑通了业务链路。但这是一个冷备的环境冷备最大的风险就是日常没有流量真正 failover 切换的时候有比较大的不确定性。这次事故再加上另一个因素我们下决心将技术体系推进到下一个阶段。 体会和教训——上云 2016年第一次517大促10点开抢的瞬间我们系统崩掉了要不是当时一个很稳的运维工程师淡定操作限流可能不少人在饿了么的职业生涯当时就结束了。因为对当时的基于Nginx和部分自研插件的网关层比较自信不相信网关层会顶不住所以全链路压测的时候根本没有压这一层事后复盘的时候发现是操作系统一个参数配置的问题如果压测一定能重现。 因为业务的效果很好大促就成为常态事实上第一次大促我们是在自己的IDC里面用常规业务系统来扛的所以影响到了非大促的正常交易。后面专门针对大促高并发大流量的场景设计了一套系统也是隔离、排队、CDN、限流这些常规的套路没什么特别的。但是对我们影响更深远的在于这套体系完全是在云上搭建的2016年之前虽然云上有系统但是生产环境流量很少顶多是短信触达这类系统在上面更多是用于搭建测试环境。在当时看来云上强大的流量清洗、资源 scale out 能力很适合大促的场景后面这套体系经历了多次大促没有波澜。 在云上搭建大促体系以及灾备节点的经历让我们后续在云上搭建全站的网关并进一步构建整个数据中心有了非常大的信心。下一篇我将继续介绍饿了么架构演变到了Cloud-Ready的状态技术体系演进为业务发展提供了更多可能性。 作者介绍黄晓路脉坤2015年10月加入饿了么负责全局架构的工作。 原文链接 本文为阿里云原创内容未经允许不得转载。
http://www.zqtcl.cn/news/472258/

相关文章:

  • 长沙 网站设计 公司价格江苏专业网站建设费用
  • 做的好的手机网站有哪些内容手机怎么做app详细步骤
  • net网站开发参考文献c++能不能作为网页开发语言
  • 我公司让别人做网站了怎么办厦门logo设计公司
  • 闸北专业做网站怎么判断网站优化过度
  • 搭建网站seowordpress重新安装如何做
  • 网站设计优化重庆教育建设有限公司网站
  • 域名注册网站查询手工制作视频教程简单又漂亮
  • 书画院网站源码网站百度指数
  • 网页设计与网站开发第三版课后答案网络运营商是干嘛的
  • wordpress分类目录网站主题自己做营销型网站
  • 简述网站推广的五要素seo排名软件怎么做
  • 做网站能做职业吗织梦如何做几种语言的网站
  • 手机网站定制咨询如何修改网站
  • 长沙大型网站建设公司建站工作室源码
  • 找设计方案的网站专注南昌网站建设
  • UE做的比较好的网站汕头网站关键词优化教程
  • 做羞羞的事情网站广州番禺招聘网最新招聘信息
  • 网站基础开发成本网站建设策划包括哪些内容
  • 商务网站建设哪家好绍兴网站建设做网站
  • 网站域名管理东莞网页设计和网页制作
  • 网站建设与制作报价网站app制作
  • 下载可以做动漫的我的世界视频网站长沙网站seo技巧
  • 汕头网站制作推荐制作影视视频的软件
  • 定制程序网站宁波英文网站建设
  • 安康公司做网站网页设计怎么设计
  • 小型企业网站系统南京seo外包平台
  • 曲靖网站制作邢台网站制作那家便宜
  • wordpress中portfolio重庆网站seo按天计费
  • 做淘客网站需要多大的空间工程公司名称大全简单大气