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

微网站开发不用模板网站导航栏的设计与实现

微网站开发不用模板,网站导航栏的设计与实现,剑灵代做装备网站,主推产品推广方案摘要#xff1a;网易云容器平台期望能给实施了微服务架构的团队提供完整的解决方案和闭环的用户体验#xff0c;为此从 2016 年开始#xff0c;我们容器服务团队内部率先开始进行 dogfooding 实践#xff0c;看看容器云平台能不能支撑得起容器服务本身的微服务架构#xf… 摘要网易云容器平台期望能给实施了微服务架构的团队提供完整的解决方案和闭环的用户体验为此从 2016 年开始我们容器服务团队内部率先开始进行 dogfooding 实践看看容器云平台能不能支撑得起容器服务本身的微服务架构这是一次很有趣的尝试。 一旦决定做微服务架构有很多现实问题摆在面前比如技术选型、业务拆分问题、高可用、服务通信、服务发现和治理、集群容错、配置管理、数据一致性问题、康威定律、分布式调用跟踪、CI/CD、微服务测试以及调度和部署等等这并非一些简单招数能够化解。实践微服务架构的方式有千万种我们探索并实践了其中的一种可能性希望可以给大家一个参考。本文是《网易容器云平台的微服务化实践》系列文章的第一篇。 Docker 容器技术已经过了最早的喧嚣期逐渐在各大公司和技术团队中应用。尽管以今天来看大家从观念上已经逐渐认可 “将镜像定义为应用交付标准将容器作为应用运行的标准环境” 的观点但还是有相当一部分人在迷惑容器技术作为一个标准应该怎么落地怎样才能大规模线上应用怎么玩才能真正解放生产力促进软件交付效率和质量答案其实在应用的架构当中。 微服务架构不是因 Docker 容器技术而生但确实是因容器技术而火。容器技术提供了一致性的分发手段和运行环境使得只有微服务化后的应用架构才能配合容器发挥其最大价值。而微服务化架构引入了很大的复杂性只有应用容器化以及规模化的容器编排与调度才能避免运维效率下降。容器技术和微服务化架构之间本是一种相辅相成的互补关系。 网易容器云平台的前身是网易应用自动部署平台 (OMAD)它能够利用 IaaS 云提供的基础设施实现包括构建和部署一体化在内的整个应用生命周期管理。2014 年以 Docker 为代表的容器技术进入大众视野我们惊喜地发现容器技术是自动部署平台从工具型应用进化为平台型应用过程中最重要的一块拼图。原本用户需要初始化主机然后借助自动部署平台完成应用的构建和部署。引入容器技术之后用户从功能开发到测试到一键部署上线整个应用交付过程中不用关心主机初始化、主机间通信、实例调度等一系列应用之外的问题。这简直是信仰 DevOps 的人的福音。 我们从 2015 年开始探索容器技术的最佳实践方式从当初 “胖容器” 与容器集群的产品形态到后来关于有状态和无状态服务的定义以及如今的新计算与高性能计算我们一直在思考并丰富着容器技术的应用场景。无论产品形态如何调整容器云平台的核心概念一直是 “微服务”通过微服务这一抽象提供高性能的容器集群管理方案支持弹性伸缩、垂直扩容、灰度升级、服务发现、服务编排、错误恢复、性能监测等功能满足用户提升应用交付效率和快速响应业务变化的需求。网易云容器平台期望能给实施了微服务架构的团队提供完整的解决方案和闭环的用户体验为此从 2016 年开始我们容器服务团队内部率先开始进行 dogfooding 实践一方面检验容器云平台能不能支撑得起容器服务本身的微服务架构另一方面通过微服务化实践经验反哺容器云平台产品设计这是一次很有趣的尝试也是我们分享容器云平台微服务化架构实践的初衷。 在谈容器服务的微服务架构实践之前有必要先把网易云容器服务大致做个介绍。目前网易云容器服务团队以 DevOps 的方式管理着30微服务每周构建部署次数 400。网易云容器服务架构从逻辑上看由 4 个层次组成从下到上分别是基础设施层、Docker 容器引擎层、Kubernetes 以下简称 K8S容器编排层、DevOps 和自动化工具层 容器云平台整体业务架构如下点击图片放大查看抛开容器服务具体业务不谈仅从业务特征来说可以分成以下多种类型括号内为举例的微服务面向终端用户 OpenAPI 服务网关、面向服务裸机服务同步通信用户中心、异步通信构建服务数据强一致需求etcd 同步服务、最终一致需求资源回收服务吞吐量敏感型日志服务、延时敏感型实时服务CPU 计算密集型签名认证中心、网络 IO 密集型镜像仓库在线业务Web 服务、离线业务镜像检查批处理任务计费日志推送、定时任务分布式定时任务长连接WebSocket 服务网关、短连接Hook 服务…… 一旦决定做微服务架构有很多现实问题摆在面前比如技术选型、业务拆分问题、高可用、服务通信、服务发现和治理、集群容错、配置管理、数据一致性问题、康威定律、分布式调用跟踪、CI/CD、微服务测试以及调度和部署等等......这并非一些简单招数能够化解。 作为主要编程语言是 Java 的容器服务来说选择 Spring Cloud 去搭配 K8S 是一个很自然的事情。Spring Cloud 和 K8S 都是很好的微服务开发和运行框架。从应用的生命周期角度来看K8S 覆盖了更广的范围特别像资源管理应用编排、部署与调度等Spring Cloud 则对此无能为力。从功能上看两者存在一定程度的重叠比如服务发现、负载均衡、配置管理、集群容错等方面但两者解决问题的思路完全不同Spring Cloud 面向的纯粹是开发者开发者需要从代码级别考虑微服务架构的方方面面而 K8S 面向的是 DevOps 人员提供的是通用解决方案它试图将微服务相关的问题都在平台层解决对开发者屏蔽复杂性。举个简单的例子关于服务发现Spring Cloud 给出的是传统的带注册中心 Eureka 的解决方案需要开发者维护 Eureka 服务器的同时改造服务调用方与服务提供方代码以接入服务注册中心开发者需关心基于 Eureka 实现服务发现的所有细节。而 K8S 提供的是一种去中心化方案抽象了服务 Service通过 DNSClusterIPiptables 解决服务暴露和发现问题对服务提供方和服务调用方而言完全没有侵入。 对于技术选型我们有自己的考量优先选择更稳定的方案毕竟稳定性是云计算的生命线。我们并不是 “K8S 原教旨主义者”对于前面提到的微服务架构的各要点我们有选择基于 K8S 实现比如服务发现、负载均衡、高可用、集群容错、调度与部署等。有选择使用 Spring Cloud 提供的方案比如同步的服务间通信也有结合两者的优势共同实现比如服务的故障隔离和熔断当然也有基于一些成熟的第三方方案和自研系统实现比如配置管理、日志采集、分布式调用跟踪、流控系统等。 我们利用 K8S 管理微服务带来的最大改善体现在调度和部署效率上。以我们当前的情况来看不同的服务要求部署在不同的机房和集群联调环境、测试环境、预发布环境、生产环境等有着不同需求的软硬件配置内存、SSD、安全、海外访问加速等这些需求已经较难通过传统的自动化工具实现。K8S 通过对 Node 主机进行 Label 化管理我们只要指定服务属性 Pod labelK8S 调度器根据 Pod 和 Node Label 的匹配关系自动将服务部署到满足需求的 Node 主机上简单而高效。内置滚动升级策略配合健康检查 liveness 和 readiness 探针和 lifecycle hook 可以完成服务的不停服更新和回滚。此外通过配置相关参数还可以实现服务的蓝绿部署和金丝雀部署。集群容错方面K8S 通过副本控制器维持服务副本数 replica无论是服务实例故障进程异常退出、oom-killed 等还是 Node 主机故障系统故障、硬件故障、网络故障等服务副本数能够始终保持在固定数量。Docker 通过分层镜像创造性地解决了应用和运行环境的一致性问题但是通常来讲不同环境下的服务的配置是不一样的。配置的不同使得开发环境构建的镜像无法直接在测试环境使用QA 在测试环境验证过的镜像无法直接部署到线上……导致每个环境的 Docker 镜像都要重新构建。解决这个问题的思路无非是将配置信息提取出来以环境变量的方式在 Docker 容器启动时注入K8S 也给出了 ConfigMap 这样的解决方案但这种方式有一个问题配置信息变更后无法实时生效。我们采用的是使用 Disconf 统一配置中心解决。配置统一托管后从开发环境构建的容器镜像可以直接提交到测试环境测试QA 验证通过后上到演练环境、预发布环境和生产环境。一方面避免了重复的应用打包和 Docker 镜像构建另一方面真正实现了线上线下应用的一致性。 Spring Cloud Hystrix 在我们的微服务治理中扮演了重要角色我们对它做了二次开发提供更灵活的故障隔离、降级和熔断策略满足 API 网关等服务的特殊业务需求。进程内的故障隔离仅是服务治理的一方面另一方面在一个应用混部的主机上应用间应该互相隔离避免进程间互抢资源影响业务 SLA。比如绝对要避免一个离线应用失控占用了大量 CPU使得同主机的在线应用受影响。我们通过 K8S 限制了容器运行时的资源配额以 CPU 和内存限制为主实现了进程间的故障和异常隔离。K8S 提供的集群容错、高可用、进程隔离配合 Spring Cloud Hystrix 提供的故障隔离和熔断能够很好地实践 “Design for Failure” 设计哲学。 服务拆分的好坏直接影响了实施微服务架构的收益大小。服务拆分的难点往往在于业务边界不清晰、历史遗留系统改造难、数据一致性问题、康威定律等。从我们经验来看对于前两个问题解决思路是一样的1只拆有确定边界能独立的业务。2服务拆分本质上是数据模型的拆分上层应用经得起倒腾底层数据模型经不起倒腾。对于边界模糊的业务即使要拆只拆应用不拆数据库。 以下是我们从主工程里平滑拆出用户服务的示例步骤将用户相关的 UserService、UserDAO 分离出主工程加上 UserController、UserDTO 等形成用户服务对外暴露 HTTP RESTful API。将主工程用户相关的 UserService 类替换成 UserFaçade 类采用 Spring Cloud Feign 的注解调用用户服务 API。主工程所有依赖 UserServce 接口的地方改为依赖 UserFaçade 接口平滑过渡。经过以上三个步骤, 用户服务独立成一个微服务而整个系统代码的复杂性几乎没有增加。 数据一致性问题在分布式系统中普遍存在微服务架构下会将问题放大这也从另一个角度说明合理拆分业务的重要性。我们碰到的大部分数据一致性场景都是可以接受最终一致的。“定时任务重试幂等” 是解决这类问题的一把瑞士军刀为此我们开发了一套独立于具体业务的 “分布式定时任务可靠事件” 处理框架将任何需保证数据最终一致的操作定义为一种事件比如用户初始化、实例重建、资源回收、日志索引等业务场景。以用户初始化为例注册一个用户后必须对其进行初始化初始化过程是一个耗时的异步操作包含租户初始化、网络初始化、配额初始化等等这需要协调不同的系统来完成。我们将初始化定义为一种 initTenant 事件将 initTenant 事件及上下文存入可靠事件表由分布式定时任务触发事件执行执行成功后清除该事件记录如果执行失败则定时任务系统会再次触发执行。对于某些实时性要求较高的场景则可以先触发一次事件处理再将事件存入可靠事件表。对于每个事件处理器来说要在实现上确保支持幂等执行实现幂等执行有多种方式我们有用到布尔型状态位有用到 UUID 做去重处理也有用到基于版本号做 CAS。这里不展开说了。当业务边界与组织架构冲突时从我们的实践经验来看宁愿选择更加符合组织架构的服务拆分边界。这也是一种符合康威定律的做法。康威定律说系统架构等同于组织的沟通结构。组织架构会在潜移默化中约束软件系统架构的形态。违背康威定律非常容易出现系统设计盲区出现 “两不管” 互相推脱的局面我们在团队间、团队内都碰到过这种情况。 本文是《网易容器云平台的微服务化实践》系列文章的第一篇介绍了容器技术和微服务架构的关系我们做容器云平台的目的以及简单介绍了网易云容器服务基于 Kubernetes 和 Spring Cloud 的微服务化实践经验。限于篇幅有些微服务架构要点并未展开比如服务通信、服务发现和治理、配置管理等话题有些未提及比如分布式调用跟踪、CI/CD、微服务测试等话题这些方面的实践经验会在后续的系列文章中再做分享。实践微服务架构的方式有千万种我们探索并实践了其中的一种可能性希望可以给大家一个参考。PS推荐一个容器技术线上直播讲师来自腾讯、华为、思科、58同城、美丽联合、当当等6位一线专家议题涵盖容器云、微服务、servicemesh等最新实践具体直播时间为本周六12月16日欢迎扫描下方图片中二维码报名参加。
http://www.pierceye.com/news/596168/

相关文章:

  • 乐清网站制作的公司php 网站源代码
  • 外国知名个人网站衡阳做网站公司
  • 女人网站源码沈阳大型网站制作公司
  • 河南外贸网站建设中国建设银行密码重置网站
  • 搭建网站是什么专业资阳网络营销顾问招聘
  • 建个门户网站网站开发人员配备
  • 营销型网站建设 上海工程造价
  • 做暧暧暖网站想建个企业网站
  • 南通做外贸的公司网站建筑招聘求职网
  • 网站排名顾问江苏省建设网站首页
  • 青岛找网站建设公司印记室内设计网站
  • 上海网站建设聚众网络网站对域名
  • 可做百科资料参考的网站福州网页定制
  • 开发一个网站需要多长时间高端网站定制开发设计制作
  • 桐乡做网站的公司视频网站建站费用
  • 企业网站建设服务网站制作的困难与解决方案
  • 宜昌营销型网站内存优化大师
  • 做购物网站的费用上海有名的效果图公司
  • 站长统计网站统计建立自己的网站软件有
  • 单页网站制作系统装修的网站都有哪些
  • 什么样的网站可以做站内站外贸网站wordpress
  • 网站栏目策划方案上不了建设银行网站
  • 深圳网络营销网站推广方法大连网页设计制作公司
  • 去哪想找人帮我做网站网站开发连接形式
  • 网龙公司有做网站吗北京建设银行支行查询官方网站
  • 本地推广找哪些网站wordpress isux主题
  • 写作网站可保存德阳网站建设公司
  • 找人做网站要密码吗榆林网站seo
  • 不同网站建设报价单深圳室内设计公司排行
  • wap网站价格用python做网站的多吗