SaaS、微服务、Oauth是什么

我们公司是一家做人力资源SaaS系统的公司,针对公司项目用到的一些名词做下科普。其实我自己以前也是迷迷糊糊,整理了一点资料。


SaaS是什么

SaaS:software as a service 软件即服务。通过互联网方便的提供自己的在线服务给用户使用,使用户不需要购买产品安装 维护等,方便快捷的服务用户 这就是SaaS。

举个例子,有一个老板需要管理10家公司,以前他可能需要购买一个管理软件,自己部署 自己维护,现在不用了,只需要找一家提供类似相关在线服务的公司,在线使用他们的服务即可。

微服务是什么

单个应用的问题:

  • 系统间通常以API的形式互相访问,耦合紧密导致难以维护;
  • 各业务领域需要采用相同的技术栈,难以快速应用新技术;
  • 对系统的任何修改都必须整个系统一起重新部署/升级,运维成本高;
  • 在系统负载增加时,难以进行水平扩展;
  • 当系统中一处出现问题,会影响整个系统;

微服务:是一种架构思想。它需要结合自身实际的业务,公司组织架构来讲。把自身的单一应用根据核心功能 独立出来,使其中每块功能可以单独部署 单独管理,互不影响。同时公司的组织架构人员同步结合分离出来的业务分配 这一整套就是微服务架构。

开发单个应用作为一系列小型服务的套件,其中每个服务都运行在自己的进程中,并且通过轻量级的机制实现彼此间的通信,这通常是 HTTP 资源 API。这些服务是围绕着业务功能构建的,并且可以通过完全自动化的部署机制进行独立部署。这些服务的集中式管理做到了最小化,每一种服务都可以通过不同的编程语言进行编写,并且可以使用不同的数据存储技术

微服务的优点:

  • 每个服务都很简单,只关注于一个业务功能。
  • 每个微服务可以由不同的团队独立开发。
  • 微服务是松散耦合的。
  • 微服务可以通过不同的编程语言与工具进行开发。

微服务的缺点:

  • 运维成本过高:服务多了,每个都需要单独维护 还需要自动化
  • 接口维护成本高:服务通过彼此之间的接口通信,改变一个接口可能影响其他服务
  • 增加了分布式的复杂性:比如网络延迟 容错性 消息序列化
  • 异步问题:如果某个操作需要同步且具有事务性会非常麻烦
  • 增加了测试的难度:很难用一致的方式来重现环境

Oauth是什么

Oauth:是一个关于授权的开放网络标准。主要用来授权第三方应用,获取用户数据。

简单来讲:Oauth是一种授权机制。数据所有者(比如用户)来告诉系统(微信),同意授权第三方应用(需要微信登录的第三方系统等)进入系统,获取数据。然后系统(微信)生成一个短期的token,用来代替密码,供第三方使用。

Oauth授权的四种模式

注意:不论使用什么模式 第三方应用都需要到系统来备案,说明自己的身份,然后可以拿到 一个 clientid 和 一个 clientsecret。主要用来防止令牌滥用,和非法第三应用请求

以第三方应用来集成微信登录为例

授权码模式:这种是第三方应用需要先申请一个授权码,然后使用该授权码获取令牌,这是最安全的一种方式。这种方式适用有后端的应用

1.用户来到第三方应用 选择使用微信登录
2.第三方应用跳转到微信的一个地址,然后带上参数指明要获取授权码,并附带上回调地址(第三方用来接收授权码code的地址) 和 客户端ID
3.微信显示给用户一个页面是否确认授权给第三方应用和授权的权限范围
4.用户同意后,微信会跳转到上面的回调地址并附带上授权码code
5.第三方应用的服务器收到授权code后,会在后端使用code来获取令牌(access_token),然后就可以获取用户授权的信息
6.第三方应用就可以使用用户信息做自己的逻辑处理

隐藏式:这种形式没有中间步骤,直接给第三方应用颁发令牌,适用于那些纯前端的应用

1.用户来到第三方应用 选择使用微信登录
2.第三方应用跳转到微信的一个地址,然后带上参数指明要获取令牌,附带上客户端ID和回调地址
3.用户在微信登录后 选择授权权限范围,然后微信就会跳回上面的回调地址并附带上生成的令牌token
4.注意一般是使用锚点的形式返回前端的,因为在跳转的过程中锚点的数据是不会发送到服务器的减少了被中间人攻击的风险
5.前端拿到令牌后就可以进行业务逻辑了,该获取用户信息的获取信息 该干嘛就干嘛

密码式:用户把账户密码直接告诉给第三方应用,然后第三方应用直接使用用户账户密码来登录系统(主要用在用户高度信任第三方的情况)

1.第三方应用要求用户提供账户密码
2.然后第三方应用通过用户的账户密码信息登录微信获取需要的内容

凭证式:也就是客户端授权,适用于没有前端的应用。这种授权主要是针对第三方应用而不是用户的了

1.第三方应用直接请求微信 附带上自己的客户端ID和客户端密码,请求生成令牌
2.微信验证客户端ID和客户端密码正确后返回令牌
3.第三方拿到令牌然后该干嘛就干嘛

从输入网址到显示中间发生了什么(越详细越好)

这个问题有坑 每一项都有好多细节,可以问的你懵逼。大概概括性内容有下面这些,不过不能深答,细节问题了解的不多。

  • URL输入
  • DNS解析
  • TCP连接
  • 发送HTTP请求
  • 服务器处理请求
  • 服务器响应请求
  • 浏览器解析渲染页面
  • 连接结束

这里有一篇细节文章,看完怀疑人生了!!!

参考链接

dbaplus
IBM
InfoQ
阮一峰


-------------The End-------------