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

北京站网站建设app开发大约多少钱

北京站网站建设,app开发大约多少钱,合肥做网站建设公司,所见即所得网页编辑器作者 | 百度文库App 导读 本文深入浅出地分享了百度文库App服务端技术栈从PHP迁移至Go的实战经验#xff0c;包含了技术选型、基础建设、流量迁移的具体方案#xff0c;以及核心项目案例的重构实践。 全文6209字#xff0c;预计阅读时间16分钟。 01 动机 长期以来#xff… 作者 | 百度文库App 导读 本文深入浅出地分享了百度文库App服务端技术栈从PHP迁移至Go的实战经验包含了技术选型、基础建设、流量迁移的具体方案以及核心项目案例的重构实践。 全文6209字预计阅读时间16分钟。 01 动机 长期以来百度文库App服务端采用 PHP 作为主要开发语言高效地支撑了业务迭代发展。随着平台流量的持续增长服务端的负载越来越大逐渐接近系统瓶颈。为了提升系统的负载能力我们采取了一些优化手段其中最快最有效的方法是增加在线集群的实例数量。此外还采用过lua开发项目承接一些逻辑简单而访问量大的接口来分担负载。由于lua本身的一些局限性不适合做复杂的业务逻辑。 伴随着IT技术的发展潮流我们积极响应公司降本增效的号召决定在2022年年中迁移并重构服务端技术栈。旨在升级技术架构提升系统负载能力。 把握技术栈迁移和项目重构的时机是很难的一件事情特别是成熟的团队要进行大的系统改动。如果没有出现真正的痛点即使研发同学认为技术实现上已经出现诸多设计不合理和有风险的地方往往并不被允许花大量时间去做技术项目。可一旦连业务人员产品经理、销售、运营也觉得系统功能需要升级的时候比如在用户体验上App文档搜索接口延迟比较长产品同学认为如果首屏渲染能明显提速的话对点击率、付费率都会有大幅的提升但是研发这边基于老的技术栈已经难以做优化了那么此刻就很适合做迁移重构。 恰逢其时产品同学提出一些提升用户体验同时适合项目重构的需求比如加速搜索结果页首屏渲染、新App首页AIGC智能创作。这些大需求十分有利于迁移重构工作的启动它们把迁移重构所需增加的额外人力占用降到最低。在已有的功能上做迁移重构更快更稳定的接口响应带来流畅的用户体验这有利于促进整体团队的okr目标达成。 回过头来梳理下当时服务端基于php5.6的技术债务 1、底层技术语言版本老旧特性落后存在执行效率低安全风险资源浪费的缺陷 2、开发质效业务逻辑交叉耦合大量废弃的接口和下线的业务逻辑降低了代码可读性、可维护性持续增加项目迭代的难度。 △技术债务 02 启动之前的状态 服务部署上文库App的服务端部署方式是nginxhhvmHipHop VM 3.0.1;baidu version:1.1.6 (rel)HHVM 是 Facebook 开发的高性能 PHP 虚拟机是传统的nginxphp-fpm的一个性能优化版本。近年已经失去了hhvm原创团队的持续维护迭代它支持的语法特性和执行效率相对落后存在一定安全风险。 查看启动迁移之初的服务端实例用量有赖于日常运维首先确认在线服务的实例cpu、内存和磁盘使用率在合理的阈值内排除了利用率较低导致资源浪费、利用率过高会有容灾风险的情况。在应用层我们一共使用了数以千计的php5实例。 03 远景 重构的投入与回报并非呈线性关系。 —— 《领域驱动设计软件核心复杂性应对之道》 直观的说我们希望服务端升级能带来更少的代码更稳定的系统更高的质量效率更佳的用户体验。这体现在下面几点 1、技术升级采用先进的语言框架支撑项目高效迭代提供强劲底层引擎、安全性和成熟的应用生态 2、改善设计梳理代码逻辑治理冗余解决代码中的坏味道构建高复用、低耦合、可扩展的业务架构 3、降本增效一方面底座升级提升代码执行效率降低平响提升服务可用性、可观测性一方面在运维实践上合理分配容器实例的cpu内存和磁盘的配额优化资源效能。 服务端升级的成功与否可以从两个方面来努力达成分别是技术栈迁移和改善既有代码设计的重构。 04 做技术选型 我们不打算使用较为小众、生态孤立的语言作为文库App服务端的技术栈。同时参考兄弟团队的技术栈升级方向最终进入技术选型决赛圈的是两种厂内框架基于php7的odp3框架Online Develop Platform和基于go的gdp2框架Go Develop Platform。 选项一PHP7框架和Phaster PHP7框架是公司发布的在线业务开发平台其提供了标准的webserver环境、标准php环境、AP框架、基础库、资源访问层、通用服务等组件统一业务的逻辑和部署结构。框架的亮点在于Phaster。Phaster能让你使用PHP语言开发高性能的Http、Fastcgi、Nshead服务进行高性能的RPC调用以极低的成本实现业务代码并行化。 Phaster和其它业界框架的对比如下。 Phaster可以作为http server也可以作为fastcgi server。相对传统nginxcgi的方式Phaster基于以上的能力实现数倍的性能提升。具备以下亮点 1、传统的hhvm或者php-fpm处理请求的逻辑是每一个请求在处理时都要先初始化php上下文请求结束时清理上下文回收各种资源。而phaster在开启上下文复用的情况下可以节省类加载文件加载初始化等过程耗费的时间。举个例子如果你的接口每次都要读取一个大文件配置可以把读取操作放到初始化文件里。在100个请求内这个读取操作只执行一次就够了 2、hhvm或php-fpm并不直接支持http协议往往前面会加上nginx作为http服务器两者之间通过fastcgi通信。而Phaster可以直接作为http服务器启动减少一层nginx的处理转发 3、协程的支持为IO密集型的业务场景提供了高并发的基础。对于阻塞性的IO可以放入协程里做将阻塞变为非阻塞在使用同步编程方案的同时享受异步效果带来的IO性能提升。 值得一提的是Go都支持这些能力。 选项二Go框架 Go 语言是由 Google 于 2009 年发布近几年伴随着云计算、微服务、分布式的发展而迅速崛起跻身主流编程语言之列和 Java 类似它是一门静态的、强类型的、编译型编程语言为并发而生所以天生适用于并发编程网络编程。 GDP2 Go Develop Platform 框架是一个对厂内基础设施支持好可扩展性好、易配置、易组装、易测试的 Go 开发框架。具备完善的 RPC Client 和 RPC Server 能力以及配套的通用基础库可以用来开发 API、Web 及后端服务等各种应用。具备以下亮点 1、对厂内基础设施支持好 2、可扩展性好、易配置、易组装 3、易用性好、对测试友好 (易 mock多种 testServer、testClient) 4、组件内部状态易观察 5、全链路超时流程控制机制稳定性好 6、厂内大规模应用稳定可靠 基本所有 Go 项目都有使用共有几千项目使用。 综合对比以上对两种框架的特点和落地的可行性等因素最终我们更倾向于向GDP框架迁移。 05 进行重构的关键路径 做好技术选型后我们就开始下一步的工作。和常见的web项目一样文库App业务迭代速度快、任务重难以保证有充足的人力长期投入到技术项目。所以技术栈升级重构的前提是在保证业务需求不停的情况下进行需要有持续重构的意识往往采用『敏捷式迭代』。 5.1 敏捷式迭代 第一步工作量预估。通过日志聚合分析得出当下有流量的App接口路由老项目很多接口没有流量关联需求已下线。实际操作下发现刚好按照qps值从大到小排序的top 50的接口的流量占比达到了总流量的99%这也确定了接口迁移顺序的优先级。 第二步制定策略。服务端技术栈go迁移的落地本质上体现为由php承接的流量转为go承接当所有流量都在go实例上运行且对php项目无底层调用的依赖关系即可认为升级完成。因此不断扩大go实例集群在App服务端总的流量占比就是我们迁移的工作目标。以此可以大概可以总结为两种方式 1、根据业务需求结合接口重要性和流量占比确定优先级进行迁移 2、新需求的代码实现和php项目不存在强依赖关系直接在go项目开发。 有相当长的一段时间是处于phpgo进行混合编程的共存状态。由于App的B/S架构特性重构完的接口需要通过接入层网关做代理转发切换服务端承接流量的具体应用层集群php-go让客户端保持path不变从而实现App老版本的高可用。采取混合编程的思路在重构初期可能会一些比较特殊的需求情况比如同一段业务逻辑需要用go写一遍用php写一遍无疑增加了一定的工作量当然这也是避免不了的。 在重构的时候避免走到一个误区瀑布模型一口气把整个项目都重构了。从时间、人力成本和稳定性上来讲这种方式风险比较大不推荐。综合来看接口粒度的分批进行重构这样不管是内化的技术迭代还是外化的业务影响都是有明显感知的。用作实现流量迁移的方式更为合适。 5.2 配套golang的基础建设 区别于php项目的work flow有以下几点不同。 1、脚手架除了定义路由、逻辑分层、生成配置等框架属性外go需要额外对协程进行封装提供给研发同学一个开箱即用的脚手架。 2、发布封装build逻辑实现打包编译、环境变量管理。 3、部署是整个二进制文件覆盖需要重启服务使用热重启模块可以实现无损上线以及更快的上线速度。 4、流量CS架构的App的接口迁移需要接入层做路由重写协调网关变更。 5、监控日志分级微服务间保持trace透传各类日志落盘符合agent采集的格式规范。 5.3 写第一个接口 一方面在开始技术栈迁移的时候需要了解到go语言层面支持并发可以很轻松的开发异步程序强类型语言。go是强类型的静态语言编译时确定类型不如PHP灵活但是更严谨更安全可以在编译阶段检查出来隐藏的绝大多数问题。 △类型转换 另一方面重构项目如何治理陈旧代码概括的说可以参考《重构-改善既有代码的设计》一书提出的 23 种代码坏味道有针对性地对代码进行重构驯服成整洁和易于阅读的代码。 把前期调研和迁移策略确定好了实际的代码开发变得得心应手。在迁移老接口流量的时候我们需要在新接口用go重新实现一遍调用方式上完全等同老接口包括path、method、验签、header规则、参数结构、响应结构、错误码。只有应用层上的虚拟域名不同。 5.4 质量保障 代码ready了区别于php项目的常规测试流程go不能绕过性能测试。因为我们写php几乎不需要关注GC和内存泄露但是go需要有时候手动测试和黑盒测试是OK的但是到线上遇到有一定并发的业务场景就会暴露问题常常表现为实例的cpu或者内存利用率持续上涨直至宕机。 应对go的内存泄露问题。一方面需要在测试流程中增加压测环节一方面需要日常多关注一下监控仪表盘的实例资源利用率、接口平响、稳定性指标是否符合预期因为有的隐藏bug即使压测也不能覆盖到。这时需要提升go服务的可观测性以便及时发现风险。 Go质量保障能力全景矩阵如下 构建线下质量保障能力 构建线上质量保障能力 5.5 流量迁移 如上图所示go项目上线后实际流量还在老项目承接。开始做流量迁移用户流量首先到达接入层在这一层我们根据不同的访问域名和路由分流到不同的应用层load balancer 为了兼容老版本的App需要在域名路由不变更的情况下完成流量迁移。在接入层网关做分流把分流到php的规则应用到go应用层load balancer 上就完成了流量迁移。注意如果是非常核心的接口我们需要进行灰度发布可以采用nginxlua的方式实现或者采用著名的开源网关ApiSix、BFE项目它们都支持灰度发布。 5.6 核心功能重构实践 这次重构比较突出的亮点体现在百度文库App的全新首页和搜索结果页优化。 1定制化新首页 文库用户个性化需求较分散希望通过将垂类用户内容需求共性抽象对连续型特征且使用较高的内容进行提取采用中心化集中推荐的方式提高用户垂类内容结构化满足进而提升用户留存率及续费意愿。重构了App首页的布局和内容展示。增加了个性化的『我的资料库』『教学进度』『推荐频道』定制化展现文档榜单和文件夹榜单。 App新首页的技术方案是全新的重构的动机来自业务驱动而非质量驱动。需求实现上底层不依赖php老项目。所以直接在go项目开发上线提供接口服务。这样上线后go自然替换掉了php原本承接的首页流量。 △文库新首页 2搜索结果页优化 服务端这边主要重构对象是一个搜索接口实际开发中和产品沟通是否可以下线不要的tab列表和内化的推荐逻辑清理多处已经下线的AB实验的业务逻辑去掉已经推全AB实验的代码判断优化文档排序算法和产品、前端同学对齐当前必须的字段去除冗余善用协程优化串行逻辑。 结合前端去除懒加载代码图片本地化使用端能力缓存接口数据搭建离线包服务等技术手段搜索结果页优化取得了不错的成果。大幅降低搜索结果页的加载速度安卓平均降低延迟41%IOS平均降低延迟43% 搜索结果点击率和成交的订单量也有一定提升。 △【新老搜索结果页】AB实验时的白屏时长统计 06 目标达成 从2022年8月启动go迁移至今接近完成App服务端的全部流量迁移工作。 1、技术迭代得益于go语言特性先进、内存管理和丰富的生态提升了代码执行效率、安全性和可观测性通过梳理业务逻辑治理冗余清理代码中的坏味道封装公共类等方法提升质量效率代码可读性和可维护性 2、提升性能一方面通过协程、通道技术改变同步阻塞的代码执行方式另一方面编译后的二进制文件执行效率远高于nginxphp-cgi的网络模型。平均减少了约30%的接口耗时TP90减少了35%的耗时 3、降本增效得益于go语言高性能的特性应用层实例的负载能力得到提升。流量迁移后文库App服务端在线集群缩减了约50%的的实例数量。 07 思考与总结 1、手机App属于CS架构的应用在迁移过程中要保证老版本Client可以使用服务 2、在面对一个长期项目时拆解目标是很重要的快步试错即时反馈也是互联网思维的一部分 3、迁移理论无损但需要把风险同步pm同学及时关注各业务指标同时制定预案保证可回滚的灵活性 4、接口刚上线或者AB实验推全后迁移的接口流量上升要养成经常观察可用性仪表盘的习惯及时处理http status异常的问题避免风险扩大化为故障。 08 结语 知而不行是为不知行而不知可以致知。 回想项目迁移重构的整个过程最有意思的是做技术选型和讨论流量迁移具体实行方案的起步阶段那时面对臃肿庞大的php单体项目如何进行迁移是有些迷茫的。在实践的摸索过程中逐渐加深对项目的理解通过所得的启发来推导制定下一步的行动形成正向循环。希望本文的内容对大家的工作实践有所帮助。 ——END—— 推荐阅读 扫光动效在移动端应用实践 Android SDK安全加固问题与分析 搜索语义模型的大规模量化实践 如何设计一个高效的分布式日志服务平台 视频与图片检索中的多模态语义匹配模型原理、启示、应用与展望 百度离线资源治理
http://www.dnsts.com.cn/news/56262.html

相关文章:

  • 网站建设研究的意义国外购物网站app
  • 建设网站公司兴田德润专业网站定制流程
  • wordpress响应式电商网站推广优化方法
  • 网站建设网站营销网站托管一体化天津的网站建设
  • 免费中英文网站源码wordpress金融模板
  • 企业网站可以备案几个wordpress 编辑器添加自定义按钮
  • 外贸网站推荐wordpress 幻灯片加数字
  • 电子商务网站设计总结河南专业网站建设
  • 可以推广的网站有哪些建设网站石家庄
  • 网站开发销售话术中升乙源建设工程有限公司网站
  • 重庆网站制作工作室招商网站怎么做
  • 运城哪家做网站的公司好wordpress如何加菜单
  • 三桥网站建设网站建设使用的什么
  • 搜索引擎优化涉及到内容公司网站建设及优化计划书
  • 网站开发工作分解结构的树形图天津市城乡建设网
  • 做网站有生意吗做一个个人网站的步骤
  • 可以做公司网站新网站怎样做优化
  • 哈尔滨做网站费用企业公司建站平台
  • 做网站是先做界面还是先做后台象山区网站建设
  • 网站新闻模块代码宾馆网站建设方案
  • asp网站变成php系统优化app
  • 科技网站实例响应式网站模板费用
  • 深圳服务平台网站直接玩的网页游戏
  • 想建一个网站技术支持:淄博网站建设
  • 淮海中路街道网站建设手机设计网站公司
  • 企业网站建设知乎网站建设类目
  • 快手秒刷自助网站向百度提交网站
  • 做网站多久能盈利山东省住房和城乡建设局网站首页
  • 雁塔区建设局网站WordPress中菜单变色
  • ftp发布asp.net网站河南省住房和城乡建设厅人教处网站