分类 Paas 下的文章

“有效的企业架构(Enterprise Architecture,EA)画出美好蓝图,对企业的生存和成功具有决定性的作用,是企业通过IT获得竞争优势的不可缺少的手段。”,作为目前应用度最为广泛的企业架构框架理论—TOGAF,提供了完善且不断优化迭代的知识体系以支持EA高效落地。


01 关于架构的思考

思考:如果不做架构规划,会带来什么问题?

系统烟囱式建设,系统边界模糊扯皮现象频发,系统重复建设,标准不统一,系统之间无法集成,阻碍创新

业务架构、数据架构、应用架构和技术架构是企业架构中的四个主要架构,它们在关注的方面和功能上有所不同,但是它们是相互关联和相互支持的,共同构成了企业的总体架构。在企业中台建设中,数据架构是核心,通过对企业的数据资源进行规划和设计,可以实现数据共享和数据治理,提高数据的价值和利用效率。

一个清晰的企业架构,如此才能保证业务流程的相互运转、信息化系统合理支撑、构建步骤有条不紊。企业架构是企业进行项目决策的重要依据,同时也是支撑企业后续发展的重要基石。

而数据分析人员更应该理解业务,全局把控,选择合适技术,解决关键问题、给出可落地实施的解决方案

TOGAF的架构模型:

  • 为什么干——战略目标、业务动机

  • 干什么——业务功能、业务能力

  • 谁来干——组织结构、业务角色

  • 怎么干——业务流程、业务规则

  • 用到的数据——业务数据

  • 用到的应用——应用系统

  • 用到的技术——技术设施

02 企业架构之4A架构

4A架构关键词:

业务架构:战略,价值链,端到端,业务流程,业务组件,自上而下分解

用架构:系统建设,系统集成,中台,自下而上抽象

术架构:技术选型,框架,PaaS平台,云原生,DevOps,微服务,容器化,部署架构

数据架构:数据标准,数据采集加工,数据入湖,数据治理,数据共享服务,数据安全,数据质量,数据架构

4A架构之间的关系如图:

图片

图片


03  什么是业务架构?

业务架构定义了业务策略、治理、组织和关键业务过程。是企业架构的核心内容,承接了企业战略,直接决定企业战略的实现能力,是其他架构领域工作的前置条件。主要目标是根据企业战略愿景,分析业务现状,识别现有业务能力及问题,提出业务改进需求,设计目标业务架构。项目在梳理AS-IS业务架构时,采用5W1H调研表调研信息,结合管理程序文件,依据业务组件归集原则,进行现状的组件梳理。同时在梳理业务组件的前提下,通过业务组件的串联形成流程图。

目的:

根据企业战略,以价值链梳理分析业务开展流程,识别上下游依赖关系,从业务和产品的视角,描述整个平台或者产品的实现。

设计步骤:

  • 识别战略,走访业务部门,问卷调查

  • 外部因素,根据宏观背景(风口),行业空间(天花板),竞争情况(赛道),上下游产业链做规划

  • 内部因素,根据商业模式,技术壁垒和资源投入进行规划

如何绘制业务架构图:

一理场景画流程,二列页面和模块,三把功能来聚类,四五纵横法上阵

A)根据用户操作流程,罗列功能模块

图片

B)形成功能矩阵

图片

C)横向分层,纵向分层

图片

图片

另一种业务架构画法参考:

图片


图片

图片


04 什么是应用架构?

应用架构为要部署的单个应用系统、它们之间的交互和它们与组织的核心业务流程之间的关系提供蓝图。工作主要目标是根据企业现状应用架构需求及业务架构中的数据流分析结果,设计目标应用架构。应用架构的设计起源于5W1H业务调研表中的信息化需求,结合业务组件的五要素定义等,以及现有信息系统的建设情况梳理IT应用现状,通过分析得出现状应用架构。

目的:

支持业务和数据处理需要哪些应用系统,完成从业务到IT的转换

设计步骤:

  • 根据业务架构图,做业务到IT的转换,识别应用程序和组件 (上接业务)

  • 优化应用程序和组件,该拆分就拆分,该聚合就聚合 (核心设计)

  • 设计应用与业务功能,流程,数据的关系(核心设计)

  • 设计应用集成,交互,开发 (下接开发)

如何绘制应用架构图:

图片


05 什么是技术架构?

技术架构描述了需要支持业务、数据和应用服务的部署的逻辑软硬件能力,包括IT基础设施、中间件、网络、通信、流程、标准等。工作主要目标是基于现状技术架构、技术标准、业务/应用/数据架构要求,设计目标技术架构。梳理AS-IS技术架构,形成平台分解图和技术谱系目录。

目的:

支持应用系统所需的技术架构,技术组件,技术选型

设计步骤:

  • 根据应用架构,进行技术支撑分析,识别技术支撑的必要条件

  • 技术选型,包括开发架构,技术产品,开发技术栈,开发平台,运行平台

  • 技术影响分析,成本,难易度,规划,治理

如何绘制技术架构图:

图片


06 什么是数据架构?

数据架构描述了企业逻辑物理数据资产和数据管理资源的结构。工作主要目标是根据企业现状数据架构需求及业务架构中的数据流转,设计目标数据架构。

目的:

描述企业数据来源,数据资产管理,数据治理,数据共享开放

设计步骤:

  • 上接业务,分析数据需求,识别数据类型,采集数据

  • 数据模型设计,概念模型(识别业务域),逻辑模型(实体关系ER),物理模型(表字段)

  • 数据治理,数据安全合规,数据质量管理

  • 数据共享开放,支撑业务决策,业务创新

如何绘制数据架构图:

图片

-- End --


单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统(例如淘宝、天猫、支付宝、阿里巴巴之间的关系)。简而言之,多个系统,统一登陆。

单点登录主要强调的是登录以后,各个系统间数据共享问题。


统一认证授权方式实现单点登录SSO

在日常生活中,很多人由于忘记某些网站的登录密码而烦恼,因为大多数用户都要记忆不少于10个用户名和相应密码。为了便于记忆,很多人都在不同的站点使用相同的用户名和密码,虽然这样可以减少负担,但是同时也降低了安全性,而且使用不同的站点同样要进行多次登录。同时,随着信息化飞速发展,大型企业和政府部门等都开始使用电子系统进行办公,而且整个办公系统由多个不同的子系统构成,这个时候有一个SSO 单点登录就显得尤为重要了。


阿里云ram单点登录架构图

用户只需要登录一次,就可以访问多个系统,不需要记忆多个口令密码。单点登录使用户可以快速访问网络,从而提高工作效率,同时也能帮助提高系统的安全性。


云sso实现多账号单点登录

使用单点登录SSO的好处具体如下:

  • 方便用户:用户使用应用系统时,能够一次登录,多次使用。用户不再需要每次输入用户名称和用户密码,也不需要牢记多套用户名称和用户密码。单点登录平台能够改善用户使用应用系统的体验。

  • 方便管理员:系统管理员只需要维护一套统一的用户账号,方便、简单。相比之下,系统管理员以前需要管理很多套的用户账号。每一个应用系统就有一套用户账号,不仅给管理上带来不方便,而且,也容易出现管理漏洞。

  • 简化应用系统开发: 开发新的应用系统时,可以直接使用单点登录平台的用户认证服务,简化开发流程。单点登录平台通过提供统一的认证平台,实现单点登录。因此,应用系统并不需要开发用户认证程序。

借此机会,今天小编给大家推荐13个开源免费单点登录SSO系统,希望对粉丝们有所帮助。祝粉丝们的每一个梦想都能放飞,每一个心愿都能实现,祝福大家万事如意!下面小编一一详细介绍这13个开源免费单点登录SSO系统,喜欢的小伙伴们点个赞和收藏。

全文大纲

  1. sa-token - 一个轻量级 Java 权限认证框架,让鉴权变得简单、优雅!

  2. authelia - 是一个免费、开源、可私有化部署的单点登录(SSO)项目

  3. BootstrapAdmin - 基于 RBAC 的 Net7 后台管理框架,权限管理,前后台分离,支持多站点单点登录,兼容所有主流浏览器

  4. JustAuth - 如你所见,它仅仅是一个第三方授权登录工具类库

  5. MaxKey - 单点登录认证系统

  6. jap - 一款开源的登录认证中间件,基于模块化设计,为所有需要登录认证的web应用提供一套标准的技术解决方案

  7. eiam - 数字身份管控平台

  8. CollectiveOAuth - 史上最全的整合第三方登录的开源库

  9. Netnr.Login - 第三方 OAuth2 授权登录管理

  10. keycloak - 是一个免费、开源身份认证和访问管理系统

  11. SD.IdentitySystem - 统一身份认证/权限管理/角色管理/菜单管理/SSO/License授权

  12. IdentityServer4 - 基于.NET 5+IdentityServer4+Vue+Sqlserver 的统一授权认证系统

  13. cas - 是一个开源的企业级单点登录系统

sa-token - 一个轻量级 Java 权限认证框架,让鉴权变得简单、优雅!

Github:github.com/dromara/sa-t





介绍

Sa-Token 是一个轻量级 Java 权限认证框架,让鉴权变得简单、优雅!主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。

功能模块

Sa-Token 目前主要五大功能模块:登录认证、权限认证、单点登录、OAuth2.0、微服务鉴权。

  • 登录认证 —— 单端登录、多端登录、同端互斥登录、七天内免登录

  • 权限认证 —— 权限认证、角色认证、会话二级认证

  • Session会话 —— 全端共享Session、单端独享Session、自定义Session

  • 踢人下线 —— 根据账号id踢人下线、根据Token值踢人下线

  • 账号封禁 —— 登录封禁、按照业务分类封禁、按照处罚阶梯封禁

  • 持久层扩展 —— 可集成Redis、Memcached等专业缓存中间件,重启数据不丢失

  • 分布式会话 —— 提供jwt集成、共享数据中心两种分布式会话方案

  • 微服务网关鉴权 —— 适配Gateway、ShenYu、Zuul等常见网关的路由拦截认证

  • 单点登录 —— 内置三种单点登录模式:无论是否跨域、是否共享Redis,都可以搞定

  • OAuth2.0认证 —— 轻松搭建 OAuth2.0 服务,支持openid模式

  • 二级认证 —— 在已登录的基础上再次认证,保证安全性

  • Basic认证 —— 一行代码接入 Http Basic 认证

  • 独立Redis —— 将权限缓存与业务缓存分离

  • 临时Token认证 —— 解决短时间的Token授权问题

  • 模拟他人账号 —— 实时操作任意用户状态数据

  • 临时身份切换 —— 将会话身份临时切换为其它账号

  • 前后台分离 —— APP、小程序等不支持Cookie的终端

  • 同端互斥登录 —— 像QQ一样手机电脑同时在线,但是两个手机上互斥登录

  • 多账号认证体系 —— 比如一个商城项目的user表和admin表分开鉴权

  • Token风格定制 —— 内置六种Token风格,还可:自定义Token生成策略、自定义Token前缀

  • 注解式鉴权 —— 优雅的将鉴权与业务代码分离

  • 路由拦截式鉴权 —— 根据路由拦截鉴权,可适配restful模式

  • 自动续签 —— 提供两种Token过期策略,灵活搭配使用,还可自动续签

  • 会话治理 —— 提供方便灵活的会话查询接口

  • 记住我模式 —— 适配[记住我]模式,重启浏览器免验证

  • 密码加密 —— 提供密码加密模块,可快速MD5、SHA1、SHA256、AES、RSA加密

  • 全局侦听器 —— 在用户登陆、注销、被踢下线等关键性操作时进行一些AOP操作

  • 开箱即用 —— 提供SpringMVC、WebFlux等常见web框架starter集成包,真正的开箱即用


Sa-Token 功能结构图

authelia - 是一个免费、开源、可私有化部署的单点登录(SSO)项目

Github:github.com/authelia/aut





介绍

Authelia是一个免费、开源、可私有化部署的单点登录(SSO)项目。它具有时尚的登录窗口,支持一次性密码设置、通知推送等功能。

Authelia可以独立安装,或者使用Docker、Kubernetes容器部署。

Authelia 架构图



Authelia 架构图

Authelia 登录案例截图




BootstrapAdmin - 基于 RBAC 的 Net7 后台管理框架,权限管理,前后台分离,支持多站点单点登录,兼容所有主流浏览器

Github:github.com/ArgoZhang/Bo




介绍

一直需要一款后台管理系统,但是网上很多开源项目都是 Java 开发的,本人是 NET 平台的对 Java 一窍不通,C#版本的本来就少而且还没有合适的。于是决定自己开发一套后台管理系统。由于前台采用 Bootstrap 布局样式,所以就叫做 BootstrapAdmin 。

本系统可以用于所有的 Web 应用程序,目前版本已经升级到 NET CORE 具备跨平台能力。数据库方面同时支持多种数据库,详细列表见后面数据库的详细列表,切换数据源仅需更改配置文件无需重启应用程序,配置简单灵活。

UI 前端使用流行的 Bootstrap 框架布局对移动设备的兼容性非常好,自适应目前市场几乎所有终端设备。本系统还具备单一后台支持多前台的特色,提供 单点登录(SSO) 的能力。

使用 NET Core + Bootstrap + PetaPoco + HTML 5 + jQuery 构建的后台管理平台

基于 RBAC 的 Net7 后台管理框架,权限管理,前后台分离,支持多站点单点登录,兼容所有主流浏览器,内置微信、支付宝、QQ等多种登录方式,内置多种样式,可切换至 Blazor 多 Tabs 模式,权限控制细化到网页内任意元素(按钮、表格、文本框等等)

主要功能

  • 通过配置与前台网站集成

  • 构建前台系统分层级菜单

  • 提供单一后台支持多前台应用配置

  • 提供单点登录

  • 集成系统认证授权模块

  • 提供角色,部门,用户,菜单,前台应用程序授权
    角色对用户授权角色对菜单授权角色对部门授权角色对应用程序授权(多个前台应用共用一个后台权限管理系统)部门对用户授权

  • 提供字典表用于前台网站个性化配置

  • 完全响应式布局(支持电脑、平板、手机等所有主流设备)

  • 内置多数据源支持,配置简单立即生效无需重启

  • 内置数据内存缓存机制,页面快速响应

  • 内置数据 操作日志 与用户 登录日志
    跟踪记录用户 登录主机地点浏览器操作系统 信息

优势

  • 前台系统不用编写登录、授权、认证模块;只负责编写业务模块即可

  • 后台系统无需任何二次开发,直接发布即可使用

  • 前台与后台系统分离,分别为不同的系统(域名可独立)

  • 可扩展为多租户应用

系统截图

















JustAuth - 如你所见,它仅仅是一个第三方授权登录的工具类库

Github:github.com/justauth/Jus



介绍

小而全而美的第三方登录开源组件。目前已支持Github、Gitee、微博、钉钉、百度、Coding、腾讯云开发者平台、OSChina、支付宝、QQ、微信、淘宝、Google、Facebook、抖音、领英、小米、微软、今日头条、Teambition、StackOverflow、Pinterest、人人、华为、企业微信、酷家乐、Gitlab、美团、饿了么、推特、飞书、京东、阿里云、喜马拉雅、Amazon、Slack和 Line 等第三方平台的授权登录。

OAuth 2 流程


OAuth 2 流程

JustAuth 集成第三方登录


JustAuth

MaxKey - 单点登录认证系统

Github:github.com/dromara/MaxK



介绍

MaxKey单点登录认证系统是业界领先的IAM-IDaas身份管理和认证产品,支持OAuth2.x、OpenID Connect、SAML2.0、JWT、CAS、SCIM等SSO标准协议,基于RBAC统一权限控制,实现用户生命周期管理,开源、安全、自主可控。

产品特性

  • 标准协议


序号协议支持
1.1OAuth 2.x/OpenID Connect
1.2SAML 2.0
1.3JWT
1.4CAS
1.5SCIM 2.0
1.6FormBased
1.7TokenBased(Post/Cookie)
1.8ExtendApi
1.9EXT


  • 登录支持


序号登录方式支持
2.1动态验证码字母/数字/算术
2.2双因素认证短信/时间令牌/邮件
2.3短信认证腾讯云短信/阿里云短信/网易云信
2.4时间令牌Google/Microsoft Authenticator/FreeOTP/支持TOTP或者HOTP
2.5域认证Kerberos/SPNEGO/AD域
2.6LDAPOpenLDAP/ActiveDirectory/标准LDAP服务器
2.7社交账号微信/QQ/微博/钉钉/Google/Facebook/其他
2.8扫码登录企业微信/钉钉/飞书扫码登录


  • 提供标准的认证接口以便于其他应用集成SSO,安全的移动接入,安全的API、第三方认证和互联网认证的整合。

  • 简化微软Active Directory域控、标准LDAP服务器机构和账号管理,密码自助服务重置密码。

  • IDaas多租户功能,支持集团下多企业独立管理或企业下不同部门数据隔离的,降低运维成本。

  • 认证中心具有平台无关性、环境多样性,支持Web、手机、移动设备等, 如Apple iOS,Andriod等,将认证能力从B/S到移动应用全面覆盖。

  • 配置化的密码策略、访问策略;支持Ip2region或GeoLite2地理库精准IP定位 ,强大安全审计,对用户全生命周期审计、访问行为记录追溯审计、安全合规审计、安全风险预警。

  • 基于Java EE平台,微服务架构,采用Spring、MySQL、Tomcat、Redis、MQ等开源技术,扩展性强。

  • 开源、安全、自主可控。

系统截图









jap - 一款开源的登录认证中间件,基于模块化设计,为所有需要登录认证的web应用提供一套标准的技术解决方案

Github:github.com/fujieid/jap



介绍

JustAuthPlus(以下简称"JAP")是一款开源的登录认证中间件,基于模块化设计,为所有需要登录认证的 WEB 应用提供一套标准的技术解决方案,开发者可以基于 JAP 适配绝大多数的 WEB 系统(自有系统、联邦协议),就像集成 JustAuth 一样,简单方便。

特性

  • 易用性:JAP 的 API 沿袭 JustAuth 的简单性,做到了开箱即用的程度。JAP 高度抽象各种登录场景,提供了多套简单实用的 API,极大程度的降低了开发者的学习成本和使用成本

  • 全面性:JAP 全量适配 JustAuth 支持的第三方平台,实现第三方登录。同时也支持所有基于标准OAuth2.0 协议或者 OIDC 协议或者 SAML 协议的应用、系统,同时 JAP 还提供不同语言版本的项目 SDK,适配多种研发场景

  • 模块化:JAP 基于模块化设计开发,针对每一种登录场景,比如账号密码、OAuth、OIDC等,都单独提供了独有的模块化解决方案

  • 标准化:JAP 和业务完全解耦,将登录认证相关的逻辑抽象出一套标准的技术解决方案,针对每一种业务场景,比如用户登录、验证密码、创建并绑定第三方系统的账号等,都提供了一套标准的策略或者接口,开发者可以基于 JAP,灵活并方便的完成相关业务逻辑的开发和适配

  • 通用性:JAP 不仅可以用到第三方登录、OAuth授权、OIDC认证等业务场景,还能适配开发者现有的业务系统的普通账号密码的登录场景,基本将所有登录相关的业务场景都已经涵盖。针对 WEB 应用,JAP 将提供满足各种不同登录场景的解决方案(和开发语言无关)

功能介绍



应用场景

  • 标准规范:新项目立项,你们需要研发一套包含登录、认证的系统,并且需要一套标准的、灵活的、功能全面的登录认证功能。

  • 需求灵活:现有登录模块为自研,但是新一轮的技术规划中,你们想将登录认证模块重构,以更加灵活的架构适应后面的新需求,比如:集成 MFA 登录、集成 OAuth 登录、SAML登录等。

  • 力求省事:你们的项目太多(或者是开发语言较多,比如:Java、Python、Node 等),每个项目都需要登录认证模块,想解决这种重复劳动的问题,使研发人员有更多的时间和精力投入到业务开发中,提高研发产能和研发效率

eiam - 数字身份管控平台

Github:github.com/topiam/eiam



介绍

业界首个基于 SpringBoot3 开源IDaas/IAM平台,用于管理企业内员工账号、权限、身份认证、应用访问,帮助整合部署在本地或云端的内部办公系统、业务系统及三方 SaaS 系统的所有身份,实现一个账号打通所有应用的服务。支持OAuth2.x、OIDC、SAML2.0、JWT、CAS等SSO标准协议。

系统架构



核心特性

  • 提供统一组织信息管理,多维度建立对应关系,实现在一个平台对企业人员、组织架构、应用信息的高效统一管理。

  • 支持钉钉、飞书、企业微信等身份源集成能力,实现系统和企业OA平台数据联动,以用户为管理基点,结合入职、离职、调岗、兼职等人事事件,关联其相关应用权限变化而变化,保证应用访问权限的安全控制。

  • 支持多因素认证,行为验证码、社交认证,融合认证等机制,保证用户认证安全可靠。

  • 支持微信、微博、QQ等社交认证集成,使企业具有快速纳入互联网化认证能力。

  • 支持 SAML2,OAuth2,OIDC,CAS,表单代填等认证协议及机制,实现单点登录功能,预配置大量 SaaS 应用及传统应用模板,开箱即用。

  • 完善的安全审计,详尽记录每一次用户行为,使每一步操作有据可循,实时记录企业信息安全状况,精准识别企业异常访问和潜在威胁的源头。

  • 提供标准REST和SCIM2.0接口轻松完成机构用户同步,实现企业对于账号生命周期的精细化管理。

  • 开源、安全、自主可控。




功能描述


功能模块功能项功能描述
账户管理组织与用户支持组织与用户维护。

用户组管理支持用户组维护。

身份源管理支持通过钉钉、飞书等途径同步用户和组织信息到系统。
认证管理认证提供商支持配置多种认证源,用户可通过不同方式登录门户。
应用管理OIDC协议应用支持通过OIDC协议进行应用SSO。

表单代填应用支持表单代填方式进行应用SSO。

JWT协议应用支持JWT协议进行应用SSO。
行为审计用户行为记录企业用户相关操作行为记录。

管理员行为记录管理员相关操作记录。
安全设置通用安全支持通用安全配置,及安全防御策略。

密码策略支持配置用户密码全局规则策略。

系统管理员负责维护系统用户配置等。
系统设置消息设置支持配置维护邮件模版、邮件服务、短信服务。

IP地理库支持配置IP地理库,实现精准IP定位。

存储配置支持配置云存储服务,如阿里云、腾讯云、MinIO等。
系统监控会话管理支持查看系统登录会话,支持回话下线。


CollectiveOAuth - 史上最全的整合第三方登录的开源库

Gitee:gitee.com/rthinking/Col



介绍

.Net平台(C#) 史上最全的整合第三方登录的开源库 => 环境支持 .NET Framework 4.5 ~ 4.6.2 和 .NetCore 3.1。目前已包含Github、Gitee、钉钉、百度、支付宝、微信、企业微信、腾讯云开发者平台(Coding)、OSChina、微博、QQ、Google、Facebook、抖音、领英、小米、微软、今日头条、Teambition、StackOverflow、Pinterest、人人、华为、酷家乐、Gitlab、美团、饿了么、等第三方平台的授权登录。以下平台正在接入中: 推特、淘宝

Netnr.Login - 第三方 OAuth2 授权登录管理

Gitee:gitee.com/netnr/Netnr.L




介绍

第三方 OAuth2 授权登录,QQ、微信开放平台(Weixin)、微信公众平台(WeixinMP)、微博(Weibo)、淘宝(Taobao)、支付宝(Alipay)、钉钉(DingTalk)、飞书(Feishu)、码云(Gitee)、GitHub、微软(Microsoft )、StackOverflow、谷歌(Google)

keycloak - 是一个免费、开源身份认证和访问管理系统

Github:github.com/keycloak/key




介绍

Keycloak是一个免费、开源身份认证和访问管理系统,支持高度可配置的单点登录(SSO)功能。

Keycloak内置支持连接到现有的LDAP或Active Directory服务器。也可以自己实现与关系数据库中的用户数据对接。

Keycloak支持许多目前比较流行认证标准协议,如:OpenID Connect,OAuth 2.0、SAML 2.0等。



SD.IdentitySystem - 统一身份认证/权限管理/角色管理/菜单管理/SSO/License授权

Gitee:gitee.com/lishilei0523/



介绍


ASP.NET/WCF/Windows/Ang统一身份认证/权限管理/角色管理/菜单管理/SSO/License授权

目的

  • 作为一个使用SD.Framework框架开发的项目样板;

  • 探索基于ASP.NET Core MVC的前端架构;

  • 探索基于WPF MVVM的前端架构;

  • 探索Angular + NG-ZORRO前端架构;

  • 做一套统一身份认证系统;

系统截图













IdentityServer4 - 基于.NET 5+IdentityServer4+Vue+Sqlserver 的统一授权认证系统

Gitee :gitee.com/wangqianlong1



介绍

在学习授权认证的过程中,发现了IdentityServer4框架。官方的例程大多是基于本地或者内存配置。没有一个完整的后台界面。github上有一些优秀的管理系统,大多都是基于MPA开发。于是基于.NET5和vue开发了这一套授权管理系统。

系统截图



cas - 是一个开源的企业级单点登录系统

Github:github.com/apereo/cas




介绍

Apereo CAS是一个开源的企业级单点登录系统,是CAS项目的一部分。

Apereo CAS开箱即用,并且提供多种协议支持,如:CAS(v1,v2和v3)、SAML(1.0和2.0)、OAuth(v2)、OpenID、OpenID Connect等。

Apereo CAS支持使用多种身份证方法,包括:JAAS、LDAP、RDBMS、Radius、JWT等。

Apereo CAS支持通过Due、YubiKey、RSA、Google Authenticator、U2F、WebAuten等进行身份验证。

架构图



导读:目前主流的微服务治理框架主要是Spring Cloud。而Istio作为新一代微服务框架,越来越受到关注。在本文中,我们分享如何选择这两种微服务框架。

275b48027209b008c7eac85c3cd084a8.png

Istio被引入的主要原因是传统微服务存在以下问题。

  • 多语言技术栈不统一:C++、Java、PHP、Go。Spring Cloud无法提出非Java语言的微服务治理。

  • 服务治理周期长:微服务治理框架与业务耦合,上线周期长,策略调整周期长。

  • 产品能力弱:Spring Cloud缺乏平台化和产品化的能力,可视化能力弱。

那么,是不是说企业一定需要使用Istio?不是。表2-2是对Spring Cloud与Istio的简单对比。

▼表2-2 Spring Cloud与Istio的对比与选择

acc1051cbe150e7da6a3336918e13a63.png

也就是说,如果企业的开源语言主要是Java、更新升级不频繁、无过多高级治理功能需求、业务规模不是非常大,使用Spring Cloud是比较合适的。

如果企业要引入Istio,引入成本有多高?具体分三种情况,如表2-3所示。

▼表2-3 企业引入Istio的成本

2368fe9dacd86496a48d83b991ed7280.png

接下来,我们对在OpenShift上通过Spring Cloud和Istio实现的企业微服务治理进行对比,如表2-4所示。

▼表2-4 Spring Cloud与Istio的实现对比

ea1306783dea186d42ee141b058983f3.png

94a0d33c5b68e332e4af0839a7132ae6.png

从开放性以及先进性角度来说,建议将服务网格Istio作为首选微服务应用框架。接下来我们介绍Istio在实践中的使用建议。

Istio运维方面的建议包括版本选择、备用环境、评估范围、配置生效、功能健壮性参考、入口流量选择。当然,这些建议只是基于目前我们在测试过程中得到的数据总结的。随着Istio使用越来越广泛,相信最佳实践将会越来越丰富。

1. 版本选择

Istio是一个迭代很快的开源项目。截止到2021年5月,社区最新的Istio版本为1.9。

频繁的版本迭代会给企业带来一些困扰:是坚持使用目前已经测试过的版本,还是使用社区的最新版本?

在前文中我们已经提到,红帽针对Istio有自己的企业版,通过Operator进行部署和管理。出于安全性和稳定性的考虑,红帽Istio往往比社区要晚两个小版本左右。因此建议使用红帽Istio的最新版本。目前看,社区的最新版本的Istio的稳定性往往不尽如人意。

98bfa1ae06467be84e703140c3955b88.png

2. 备用环境

针对相同的应用,在OpenShift环境中部署一套不被Istio管理的环境。比如文中的三层微服务,独立启动一套不被Istio管理的应用,使用OpenShift原本的访问方式即可。

这样做的好处是,每当进行Istio升级或者部分参数调整时都可以提前进行主从切换,让流量切换到没有被Istio管理的环境中,将Istio升级调整验证完毕后再将流量切换回来。

3. 评估范围

由于Istio对微服务的管理是非代码侵入式的。因此通常情况下,业务服务需要进行微服务治理,需要被Istio纳管。而对于没有微服务治理要求的非业务容器,不必强行纳管在Istio中。当非业务容器需要承载业务时,被Istio纳管也不需要修改源代码,重新在OpenShift上注入Sidecar部署即可。

4. 配置生效

如果系统中已经有相关对象的配置,我们需要使用oc replace -f指定配置文件来替换之前配置的对象。Istio中有的配置策略能够较快生效,有的配置需要一段时间才能生效,如限流、熔断等。新创建策略(oc create -f)的生效速度要高于替换性策略(oc replace -f)。因此在不影响业务的前提下,可以在应用新策略之前,先删除旧策略。

此外,Istio的配置生效,大多是针对微服务所在的项目,但也有一些配置是针对Istio系统。因此,在配置应用时,要注意指定对应的项目。

在OpenShift中,Virtual Service和Destination Rules都是针对项目生效,因此配置应用时需要指定项目。

5. 功能健壮性参考

从笔者大量的测试效果看,健壮性较强的功能有基于目标端的蓝绿、灰度发布,基于源端的蓝绿、灰度发布,灰度上线,服务推广,延迟和重试,错误注入,mTLS,黑白名单。

健壮性有待提升的功能有限流和熔断。

所以,从整体上看,Istio的功能虽日趋完善,但仍有待提升。

6. 入口流量方式选择

在创建Ingress网关的时候,会自动在OpenShift的Router上创建相应的路由。Ingress网关能够暴露的端口要多于Router。所以,我们可以根据需要选择通过哪条路径来访问应用。

在Istio体系中的应用不使用Router也可以正常访问微服务。但是PaaS上运行的应用未必都是Istio体系下的,其他非微服务或者非Istio体系下的服务还是要通过Router访问。此外,Istio本身的监控系统和Kiali的界面都是通过Router访问的。

相比Spring Cloud,Istio较好地实现了微服务的路由管理。但在实际生产中,仅有微服务的路由管理是不够的,还需要诸如不同微服务之间的业务系统集成管理、微服务的API管理、微服务中的规则流程管理等。

本文摘编自《金融级IT架构与运维:云原生、分布式与安全》,经出版方授权发布。(ISBN:978-7-111-69829-6)

eb38f4db94b27176d07262edfad9c157.png

《金融级IT架构与运维:云原生、分布式与安全》


o语言有微服务框架,例如:1、istio,是一个开源的微服务管理、保护和监控框架;2、go-kit,是一个go语言的分布式开发包,用于开发微服务;3、go-zero,是一个集成了各种工程实践的web和rpc框架;4、go-micro,是一个专注于简化分布式系统开发的微服务生态系统;5、kratos;6、cloudwego-kitex;7、goa;8、dubbo-go等等。

go语言有微服务框架吗

本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

微服务框架是将某个应用程序开发划分为对许多小型服务独立的进行业务开发,这些服务一般围绕业务规则进行构建,可以用不同的语言开发,使用不同的数据存储,最终使得每个服务运行在自己的行程中。并且它们之间采用轻量级通信机制进行通信。

那么有基于go语言的微服务框架吗?答案是:有!下面就来分享一些Go语言开发的微服务框架。

1.Istio(31.7K)

项目简介:Istio是由Google、IBM和Lyft开源的微服务管理、保护和监控框架。使用istio可以很简单的创建具有负载均衡、服务间认证、监控等功能的服务网络,而不需要对服务的代码进行任何修改。

仓库地址:https://github.com/istio/istiohttps://github.com/istio/istio

官方文档地址:https://istio.io/latest/docs/https://istio.io/latest/docs/

2.Go-kit(24.1K)

项目简介:Go-kit 是一个 Go 语言的分布式开发包,用于开发微服务。

仓库地址:https://github.com/go-kit/kit/https://github.com/go-kit/kit/

官方文档地址:https://gokit.io/

3.Go-zero(24.1K)

项目简介:go-zero 是一个集成了各种工程实践的 web 和 rpc 框架。

仓库地址:https://github.com/tal-tech/go-zerohttps://github.com/tal-tech/go-zero

官方文档地址:https://go-zero.dev/cn/docs/introduction

4.Go-micro(19.6K)

项目简介:Micro是一个专注于简化分布式系统开发的微服务生态系统。可插拔的插件化设计,提供强大的可插拔的架构来保证基础组件可以被灵活替换。

仓库地址:https://github.com/asim/go-micro

官方文档地址:https://go-micro.dev/

中文文档:介绍 · go-micro 微服务开发中文手册 · 看云Micro是一个微服务生态系统。目标是简化分布式系统开发。技术正在迅速发展。现在云计算能够给我们几乎是无限的scale能力,但是采用现有工具来使用scale能力仍然是很困难的。Micro试图去解决这个问题,开发人员首先关注。Micro的核心是简单易用,任何人都可以轻松开始编写微服务。随着您扩展到数百种服务,Micro将提供管理微服务环境所需的基本工具https://www.kancloud.cn/linimbus/go-micro/529015 

5.Kratos(19.2K)

项目简介:哔哩哔哩(B站)开源的一套Go微服务框架,包含大量微服务相关框架及工具。

仓库地址:https://github.com/cloudwego/kitex

官方文档地址:https://go-kratos.dev/docs/

6.CloudWeGo-Kitex(5.2K)

项目简介:字节跳动,KiteX 自 2020.04 正式发布以来,公司内部服务数量 8k+,QPS 过亿。KiteX 是字节跳动框架组研发的下一代高性能、强可扩展性的 Go RPC 框架。除具备丰富的服务治理特性外,相比其他框架还有以下特点:集成了自研的网络库 Netpoll;支持多消息协议(Thrift、Protobuf)和多交互方式(Ping-Pong、Oneway、 Streaming);提供了更加灵活可扩展的代码生成器。

仓库地址:https://github.com/cloudwego/kitex

官方文档地址:https://www.cloudwego.io/zh/docs/overview/

7.Goa(4.9K)

项目简介:Goa 是一款用 Go 用于构建微服务的框架,采用独特的设计优先的方法

仓库地址:https://github.com/goadesign/goa

官方文档地址:https://goa.design/

8.Dubbo-go(4.2K)

项目简介:阿里,由Apache 软件基金会官方发布Go 语言加入 Dubbo 生态,架构是基于dubbo的extension模块和分层的代码设计,主要解决 Go 项目与 Java & Dubbo 项目的互通问题,同时也为 Go 项目提供了一种 RPC 与微服务

仓库地址:https://github.com/apache/dubbo-go

官方文档地址:https://dubbogo.github.io/dubbo-go-website/zh-cn/

9.Jupiter(3.9K)

项目简介:斗鱼开源的一套微服务治理框架,提供丰富的后台功能,管理应用的资源、配置,应用的性能、配置等可视化。

仓库地址:https://github.com/douyu/jupiter

官方文档地址:http://jupiter.douyu.com/

10.Tars-go(3.1K)

项目简介:腾讯,Tarsgo是基于Golang编程语言使用Tars协议的高性能RPC框架

仓库地址:https://github.com/TarsCloud/TarsGo

官方文档地址:https://tarscloud.github.io/TarsDocs/SUMMARY.html#TarsGo

附:北极星-polaris-go

北极星是腾讯开源的服务发现和治理中心,致力于解决分布式或者微服务架构中的服务可见、故障容错、流量控制和安全问题。

仓库地址:https://github.com/polarismesh/polaris

官方文档地址:https://polarismesh.cn/#/

11.Jaeger

Jaeger是Uber的分布式跟踪系统 ,基于google dapper的原理构建, 以Cassandra作为存储层。

12.fabio

fabio是ebay团队用golang开发的一个快速、简单零配置能够让consul部署的应用快速支持http(s)的负载均衡路由器。【相关推荐:Go视频教程

13.gizmo

gizmo是纽约时报开源的go微服务工具,提供如下特性:标准化配置和日志;可配置策略的状态监测端点;用于管理pprof端点和日志级别的配置;结构化日志,提供基本请求信息;端点的有用度量;优雅的停止服务; 定义期待和词汇的基本接口。

14.kite

kite是一个基于go语言的微服务框架, Kite是Koding公司内部的一个框架, 该框架提供服务发现,多种认证功能,服务端通过RPC进行通信,同时还提供了websocket的js库,方便浏览器于服务器间进行通信。

15.hystrix-go

hystrix-go是用来隔离远程系统调用,第三方库调用,服务调用,提供熔断机制,避免雪崩效应的库, Hystrix的go版本。注Hystrixs是Netflix开源的一个java库。

16.Gateway

Gateway是一个使用go实现的基于HTTP的API网关。特性:API聚合; 流控; 熔断; 负载均衡; 健康检查; 监控; 消息路由; 后端管理WebUI。能做什么:规划更友好的URL给调用者。聚合多个API的结果返回给API调用者,利于移动端,后端可以实现原子接口。保护后端API服务不会被突发异常流量压垮。提供熔断机制,使得后端API Server具备自我恢复能力。借助消息路由能力,实现灰度发布,AB测试。

17.rainbond

云帮是一款以应用为中心的开源PaaS,深度整合Kubernetes的容器管理和Service Mesh微服务架构最佳实践,满足支撑业务高速发展所需的敏捷开发、高效运维和精益管理需求。

18.appdash

appdash是一款go版本的分布式应用跟踪系统, 基于google dapper的原理构建。

19.Hprose

Hprose是高性能远程对象服务引擎的缩写——微服务首选引擎。它是一个先进的轻量级的跨语言跨平台面向对象的高性能远程动态通讯中间件。它不仅简单易用,而且功能强大。你只需要稍许的时间去学习,就能用它轻松构建跨语言跨平台的分布式应用系统。

更多编程相关知识,请访问:编程视频!!

以上就是go语言有微服务框架吗的详细内容,更多请关注php中文网其它相关文章!


微服务概述

  • 单体架构

    • 尽管在设计上也是模块化的设计逻辑,但是打包还是会打包在一起,其中最主要的问题就是这个应用太复杂,导致应用无法扩展,可靠性低,最终单体敏捷性开发和部署都变的无法完成

  • 微服务起源

    • 微服务是SOA服务的一种实践

    • 小即使美:小的服务代码少,bug少,容易测试,容易维护,也可以更容易不断迭代完善

    • 单一职责:一个服务只做好一件事

    • 可移植性比效率更重要

    • 尽可能早的创建模型

  • 微服务定义

    围绕业务功能构建,服务关注单一业务,服务间采用轻量级通信机制,可以全自动独立部署,可以使用不同的编程语言和数据存储技术,微服务架构通过业务拆分实现服务组件化,通过组件组合快速开发系统,业务单一的服务组件又可以独立部署,使得整个系统变的灵活

    • 原子服务

    • 独立进程

    • 隔离部署

    • 去中心化服务治理

  • 微服务的不足

    • 微服务应用是分布式系统,由此会带来固有的复杂性,开发者不得不用RPC进行消息传递,实现进程之间的通信

    • 分区的数据库结构:在微服务架构应用中,需要更新不同服务所使用的不同的数据库,从而对开发者提出了更高的挑战

    • 测试一个机遇微服务架构的应用也是很复杂的任务

    • 服务模块之间的依赖

    • 对运维要求较高

  • 组件服务化

    传统实现组件的方式是通过库,库的局部变化意味着整个应用重新部署,通过服务来实现组件,意味着应用拆散为一系列服务运行在不同的进程中

    • Kit:一个微服务的基础库

    • Service:业务代码 + kit依赖 + 第三方依赖组成的业务微服务

    • rpc + message queue : 轻量级通信

  • 去中心化

    • 数据去中心化

    • 治理去中心化

    • 技术去中心化

  • 基础设施自动化

    • CI CD:Gitlab + Gitlab hooks + k8s

    • Testing: 测试环境,单元测试,API自动化测试

    • 在线运行时:k8s + Prometheus ELK Control Panle

  • 可用性 和兼容性设计

    • 隔离

    • 超时控制

    • 负载保护

    • 限流

    • 降级

    • 重试

    • 负载均衡

微服务设计

  • API网关设计

    增加一个api-interface 用于统一协议出口,在服务内进行大量的dataset join 按照业务场景来设计粗力度的API 为后续服务的进化带来优势

    • 轻量交互

    • 差异服务

    • 动态升级

    • 沟通效率的提升

    • 业务流程: 移动端-- API 网关 -- BFF -- 微服务

  • 微服务划分

    • 业务职能

    • 限界上下文

    • 边界划分

  • 微服务安全

    • full trust

    • half trust

    • zero trus

    • Api gateway -- bff - service - biz auth - jwt - request args

    • 对于外网的请求来说,我们通常在 API Gateway 进行统一的认证拦截,一旦认证成功,我们会使用 JWT 方式通过 RPC 元数据传递的方式带到 BFF 层,BFF 校验 Token 完整性后把身份信息注入到应用的 Context 中,BFF 到其他下层的微服务,建议是直接在 RPC Request 中带入用户身份信息(UserID)请求服务。

    • 对于内网服务,一般要区分身份认证和授权

    • GRPC

      • 主动健康检查 health check,可以在服务提供者服务不稳定时,被消费者所感知,临时从负载均衡中摘除,减少错误请求。当服务提供者重新稳定后,health check 成功,重新加入到消费者的负载均衡,恢复请求。health check,同样也被用于外挂方式的容器健康检测,或者流量检测(k8s liveness & readiness)。

      • 多语言

      • 轻量级,高性能

      • 可插拔

      • IDL

      • 设计理念

      • 移动端:基于HTTP2设计,支持双向流,消息头压缩,单TCP的多路复用,服务端推送等特性

      • 服务而非对象,消息而非引用

      • 负载无关:不同的服务需要使用不同的消息类型和编码

      • 流:streaming api

      • 阻塞式和非阻塞式:支持异步和同步处理在客户端和服务端间交互的消息序列。

      • 元数据交换

      • 标准化状态码

      • protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative helloworld/helloworld.proto

      • 特性:

      • healthCheck

      • 服务发现

        • 客户端发现:直连,比服务端服务发现少一次网络跳转,Consumer 需要内置特定的服务发现客户端和发现逻辑。

        • 服务端发现:Consumer 无需关注服务发现具体细节,只需知道服务的 DNS 域名即可,支持异构语言开发,需要基础设施支撑,多了一次网络跳转,可能有性能损失。

        • 发现类型

        • 通过 Family(appid) 和 Addr(IP:Port) 定位实例,除此之外还可以附加更多的元数据:权重、染色标签、集群等。

        • Provider  注册后定期(30s)心跳一次,注册, 心跳,下线都需要进行同步,注册和下线需要进行长轮询推送。

        • Consumer 启动时拉取实例,发起30s长轮询

        • Server 定期(60s) 检测失效(90s)的实例,失效则剔除。短时间里丢失了大量的心跳连接(15分钟内心跳低于期望值*85%),开启自我保护,保留过期服务不删除。

      多集群多租户

      • 多集群

        • 从单一集群考虑,多个节点保证可用性,通常使用N+2的方式来冗余节点

        • 从单一集群故障带来的影响面角度考虑冗余多套集群

        • 利用 paas 平台,给某个 appid 服务建立多套集群(物理上相当于两套资源,逻辑上维护 cluster 的概念),对于不同集群服务启动后,从环境变量里可以获取当下服务的 cluster,在服务发现注册的时候,带入这些元信息。当然,不同集群可以隔离使用不同的缓存资源等。

        • 统一为一套逻辑集群(物理上多套资源池),即 gRPC 客户端默认忽略服务发现中的 cluster 信息,按照全部节点,全部连接。能不能找到一种算法从全集群中选取一批节点(子集),利用划分子集限制连接池大小。

      • 多租户

        • 在微服务架构中允许许多系统共存是利用微服务稳定性和模块化最有效的方式之一,这种方式一般被称为多租户,租户可以是测试,金丝雀发布,影子系统(shadow systems),甚至服务层或者产品线,使用租户能够保证代码的隔离性并且能够基于流量租户做路由决策。

        • 入站请求绑定上下文,in-process使用context传递,跨服务使用metadata传递,在这个架构中每一个基础组件都能够理解租户信息,并且能够给予租户路由隔离流量,同时在平台中允许对运行不同的微服务有更多的控制,比如指标和日志,在微服务架构中典型的基础组件是日志,指标,存储,消息队列,缓存和配置。基于租户信息隔离数据需要分别处理基础组件。



      作者:LegendGo
      链接:https://www.jianshu.com/p/e44b4a7beb33
      来源:简书
      著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。