热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

360搜索在微服务架构下的技术平台实践(二)--微服务架构

什么是微服务?其实最近两年微服务这个概念挺火的,那其实究竟什么是微服务呢?微服务其实是一种架构风格、一种约定。就和我们开发中使用的设计模式是一个道理。每个微服务仅关注于完成一

什么是微服务?

其实最近两年微服务这个概念挺火的,那其实究竟什么是微服务呢?

微服务其实是一种架构风格、一种约定。就和我们开发中使用的设计模式是一个道理。
每个微服务仅关注于完成一件任务
每个微服务独立部署,互不干预
一个应用由一个或多个微服务组成

把我们上一文中的单体架构,拆分成微服务的结构,那么应该是如下图:

这里写图片描述

这里我们将每个功能拆分为一个单独的服务,有自己的web容器,然后通过gateway连结起来,对外提供服务。用户只和Gateway打交道,有点像是反向代理的感觉。

但这里的拆分并不一定非得变为这样,你可以拆得更细,或者是更粗,视你业务情况而定,不要脱离业务谈架构

这些服务之间如何通信?

我们将一个商城应用拆分为如上图所示后。当用户购买一件商品时,要涉及到支付、修改购物车信息、修改商品库存、发送短信通知 等多个服务。
当我们将整个单体架构拆为这样的微服务时,他们之间如何通信和协作呢?

通信方式
通信方式分为同步、异步两类
同步:
   P2P
   Gateway

P2P方式中,服务之间直接相互调用,每个服务都对外开放自己的API并调用其他服务的接口
Gateway方式中,服务之间相互调用也通过API网关

P2P优点:少一次网络IO
P2P缺点:无法做流量控制、无法记录具体调用情况
Gateway调用方式的优缺点正好与之相反

异步:
   消息中间件

一般用于下游服务执行时间不可控,或与调用者接下来逻辑无关联的情况

一般同步通信下我们使用 HTTP RESTful 方式,异步下我们使用消息中间件(如消息队列、发布/订阅等)

一般常用的消息格式为 JSON

如何划分你的团队/服务 规模

2P2W 原则:

2 Pizza – 负责一个服务的团队,不要让两个Pizza不够分,也就意味着最好不要超过6个人,如果你服务粒度很小,那么2-3个人也不是不行

2 Week – 一个团队对其所负责的服务,如果要进行重构,时间不要超过2周,也就意味着太复杂或是工程太浩大的服务,需要考虑再次进行拆分

微服务的优点&挑战

优点

简单
        一个服务只关注一个功能
扩容灵活
        哪个服务需要扩容,就给哪个服务单独做扩容
技术栈灵活
        各团队可以自行选择最佳的技术栈来进行开发,例如Go支撑高性能服务,           PHP支持普通业务
持续集成友好
        允许我们在频繁发布不同服务的同时,保持系统其他服务的可用性

挑战

需要技术积累
运维成本
        需要构建/测试/部署/运行 数十个甚至更多的服务。不同的服务有不同的技          术栈,运维人员难以全部精通,开发人员才是运维该服务的专家
人才稀缺
        具有较强的DevOPS能力的人才稀缺。
分布式系统带来的问题
        分布式事务、网络延迟/波动 等。
难以全面测试
        需要自动化流程,不论是自动化测试还是自动集成,一般常用的质量保证            手段是上线后通过监控发现生产环境的异常,进而快速回滚或采取行动

划重点

每个微服务是一个单体架构
每个微服务专注于一个功能
数据需要去中心化,每个微服务只能访问自身的数据库
一套微服务组合起来,对外提供一个完整的服务


推荐阅读
  • ElasticSerach初探第一篇认识ES+环境搭建+简单MySQL数据同步+SpringBoot整合ES
    一、认识ElasticSearch是一个基于Lucene的开源搜索引擎,通过简单的RESTfulAPI来隐藏Lucene的复杂性。全文搜索,分析系统&# ... [详细]
  • TiDB | TiDB在5A级物流企业核心系统的应用与实践
    TiDB在5A级物流企业核心系统的应用与实践前言一、业务背景科捷物流概况神州金库简介二、现状与挑战神州金库现有技术体系业务挑战应对方案三、TiDB解决方案测试迁移收益问题四、说在最 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了OpenStack的逻辑概念以及其构成简介,包括了软件开源项目、基础设施资源管理平台、三大核心组件等内容。同时还介绍了Horizon(UI模块)等相关信息。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • Django + Ansible 主机管理(有源码)
    本文给大家介绍如何利用DjangoAnsible进行Web项目管理。Django介绍一个可以使Web开发工作愉快并且高效的Web开发框架,能够以最小的代价构建和维护高 ... [详细]
  • 初学SpringBootch06接口架构风格 RESTful
    ch06-接口架构风格RESTful1.1认识RESTful1.1.1RESTful架构风格1.2RESTful注解1.3RESTful风格的使用1.3.1加入Maven依赖1.3 ... [详细]
  • 提供:ZStack云计算原创2016-12-26张鑫讲师介绍张鑫ZStack总架构师、联合创始人《系统虚拟化》主要作者,曾任职Intel开源软件技术中心 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 数字账号安全与数据资产问题的研究及解决方案
    本文研究了数字账号安全与数据资产问题,并提出了解决方案。近期,大量QQ账号被盗事件引起了广泛关注。欺诈者对数字账号的价值认识超过了账号主人,因此他们不断攻击和盗用账号。然而,平台和账号主人对账号安全问题的态度不正确,只有用户自身意识到问题的严重性并采取行动,才能推动平台优先解决这些问题。本文旨在提醒用户关注账号安全,并呼吁平台承担起更多的责任。令牌云团队对此进行了长期深入的研究,并提出了相应的解决方案。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
author-avatar
小雨闹不住
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有