元数据驱动的微服务架构(上)
本次分享有两个部分:
微服务架构需要元数据
介绍微服务与元数据的关系。
一、微服务架构需要元数据
企业IT架构已经发展了多个阶段,一方面是服务化架构的发展,在SOA阶段主要解决应用间集成问题,但随着企业业务的发展,单个应用逐渐成为“巨石型”应用,难以扩展也难以维护。
微服务架构应运而生,微服务架构专注于单个应用的内部,将“巨石”应用拆分成为多个微服务,以微服务为单独单元开发运营。另一方面是模型化架构式的发展,模型驱动工程也在不断发展,从MDA(模型驱动架构)全面的完全模型自动化,到DSM(特定领域建模)针对特定领域的建模,再发展到DDD(领域模型驱动设计),模型的作用变得更加特定化和轻量化。
服务化架构和模型化架构其实是统一的。在微服务架构中微服务的粒度小,数量多,微服务的设计与微服务之间的连接需要一套规范,同时需要一套可以对话的统一“语言”。
传统的模型方式的核心目标是能够自动生成代码,故定义过于复杂。而微服务间的“语言”的目标与传统不同,用元数据作为“语言”驱动整个微服务架构是不错的选择。
我们看看元数据表示了什么内容,我在之前一篇文章中从心理学的角度详细说明了元数据是什么。(若阅读此文,请微信搜索文章标题“轻松理解元数据,只需懂点心理学”)元数据就是计算机的认知维度,可以说,掌握了元数据就掌握了信息的维度,只有充分利用好元数据(也就是信息的维度),通过合理的元数据建模(维度整合),对元数据进行科学管理(维度完善),才能让让计算机更好地认知企业系统。
元数据管理的核心内容是,信息的概念和信息之间的连接。概念表示对某个业务所有维度的集合,连接是对业务维度之间关系的描述。通过这样的描述,能够使元数据成为微服务直接对话的“语言”,还能够通过“语言”规范微服务体系的设计。
二、微服务与元数据的关系
定位模型与元数据的概念之前,我们不得不提到MOF(元对象设施或者元对象机制 MetaObject Facility),它是OMG(国际标准化组织)元模型和元数据的存储标准,提供在异构环境下对元数据知识库的访问接口。我们可以看到每个层次的上一层是下一层的模型,本层次的描述语言在它的上一层模型中。
我们今天重点关注M1层元数据,也就是通常说的“数据模型层”。M1层(元数据)对应在日常我们项目开发过程中进行的ER模型图模型设计。也就是说我们进行所有的数据层设计其实都是元数据的建模过程。
我们来看一下平时是如何进行模型设计的,也就是进行元数据的设计,数据的描述。我们一般建模过程会将其分解成更小的、更简单的元素,通过多个模型之间的关系描述复杂的事物逻辑。一般从需求开始,无论是用户的需求还是技术需求,能力是实现需求的桥梁与纽带,借助现有的技术手段进行实现的支撑。随着建模过程逐渐深入,建模可以分为概念模型-逻辑模型-物理模型,层层递进最终物理模型会确定数据库实现方式,将数据表固化到数据库中。
我们再来看建模的手段工具,最有效的简化方式是图形建模,也就是我们通常所说的ER图建模。多数建模方法都建立在可视化语言的基础上。比如UML实体-关系图建模,这就是最常见的语义模型建模方法。 基于语义分析模型的元数据模型,主要是建立模型的实体与实体之间的关系,包括元数据模型之间关系的建立,元数据之间的输入输出接口等。
那么问题就来了,之前我们碰到的数据往往是集中存储的。如果数据模型的存储是分散的,多个元数据模型群之间的数据描述是不一致的,多个模型之间互相访问与数据共享应该遵照什么样的标准呢?我们是不是也要设计一套符合所有模型之间交互的语义模型?这种模型之间的所有交互需求都可以满足吗?
确实是有不同数据模型之间统一标准相互访问的机制。答案也是肯定的。XMI 是 OMG在元数据交换方面的最重要标准之一,同时也是 W3C 认可的标准。允许 MOF元数据(即遵从 MOF 或基于 MOF 的元模型的元数据)以流或文件的形式按照 XML 的标准格式进行交换。
在微服务中每个服务都有自己的数据库。这种思路与企业级的传统数据建模过程不同,每个微服务中需要建立自己的数据模型。各微服务的接口API需要定义元数据,接口需要清晰的元数据模型,对象、属性。也就是我们需要元数据的原因,我们需要建一套完整的元数据模型机制,这也就是元数据与微服务之间的关系所在。
关于作者:
王轩EAII-企业架构创新研究院 专家委员
现任普元软件产品部副总兼大数据产品线总经理,2010年加入普元,全面主持普元大数据产品的研发、拓展及团队管理工作。十年大型企业信息化架构设计与建设经验,曾任中国人民银行核心平台架构师。主持参与了国家开发银行大数据项目、中国人民银行软件开发平台、国家电网云计算平台等大型项目建设。王轩对大数据行业有着深入的研究和洞察,并对企业信息化平台建设,企业云计算及大数据平台建设有着丰富经验。
关于EAII
EAII(Enterprise Architecture Innovation Institute)企业架构创新研究院,是专注于企业架构与业务创新领域的研究机构,致力于金融、电信、能源与政务等行业领域的企业软件架构优化设计与 创新研究,以及分布式计算、服务构件技术、可视化技术、业务流程管理、内存计算、企业移动计算、数据治理等领域的技术研究。
本文转载自微信公众号 中生代技术 freshmanTechnology
相关文章:

【Codeforces】427B Prison Transfer(别让罪犯跑了...)
http://codeforces.com/problemset/problem/427/B 从一串数字中选出连续的长度为c的子串,且子串中的每一个数都不能大于t,问这样的子串有多少个 TLE,看看n的范围就知道了,哎呀呀,有点chun #include <iostream>…

PHPUnit实践三(构建模块化的测试单元)
本系列教程所有的PHPUnit测试基于PHPUnit6.5.9版本,Lumen 5.5框架 目录结构 模块下的目录是符合Lumen的模块结构的如:Controllers、Models、Logics等是Lumen模块目录下的结构目录如果有自己的目录同级分配即可,如我这里的Requests 整体结构 ├…
SLAM笔记(五)光束平差法(Bundle Adjustment)
1.什么是光束平差法 前边的八点法,五点法等可以求出闭式解的前提是已经知道确切的点对。但实际情况中往往存在大量的噪声,点与点不是精确地对应甚至出现一些错误匹配。 光束平差法由Bundle Adjustment翻译得来,有两层意思: 对场…

【Code forces】63B Settlers' Training
http://codeforces.com/problemset/problem/63/B 给你一串数字,直到所有数字都变为k为止,相同的数为一组,在一次中,所有不同的数都加1 1 2 2 3 → 2 2 3 4 → 2 3 4 4 → 3 4 4 4 → 4 4 4 4 #include <ios…

[elixir! #0007] [译] 理解Elixir中的宏——part.5 重塑AST by Saša Jurić
上一章我们提出了一个基本版的deftraceable宏,能让我们编写可跟踪的函数。宏的最终版本有一些剩余的问题,今天我们将解决其中的一个——参数模式匹配。 今天的练习表明我们必须仔细考虑宏可能接收到的输入。 问题 正如我上一次暗示的那样,当前…
vue-cli3环境变量与分环境打包
第一步 : 了解环境变量概念 我们可以根目录中的下列文件来指定环境变量: .env # 在所有的环境中被载入 .env.local # 在所有的环境中被载入,但会被 git 忽略 .env.[mode] # 只在指定的模式中被载入 .env.[mode].local # 只在指定…
SLAM闭合回环————视觉词典BOW小结
在目前实际的视觉SLAM中,闭环检测多采用DBOW2模型https://github.com/dorian3d/DBoW2,而bag of words 又运用了数据挖掘的K-means聚类算法,笔者只通过bag of words 模型用在图像处理中进行形象讲解,并没有涉及太多对SLAM的闭环检测…

【Codeforces】53D Physical Education (有点像冒泡)
http://codeforces.com/problemset/problem/53/D 从上面所给的序列变成下面所给的序列 交换的时候只能交换相邻的两个数字 输出每一步的交换方法,输出的是该元素在序列中的位置(第一个数的位置是1) 不要求输出步数最少的那一种方法 当同…

js脚本冷知识
js中有个很恶心的写法。比如这个var adsf(function(){})();这样的写法,主要是原生的,能在dom元素加载完之后实现自动加载这个脚本文件到里面去。可以验证这个(function(){.......)();在.......里面可以直接…

Python中is同一性运算符和==相等运算符区别
2019独角兽企业重金招聘Python工程师标准>>> 在区分is和这两种运算符区别之前,需要知道Python中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)。 比较对象的value(值) 是python标准操作符中的比较操作符…
C++实现十大排序算法(冒泡,选择,插入,归并,快速,堆,希尔,桶,计数,基数)排序算法时间复杂度、空间复杂度、稳定性比较(面试经验总结)
排序算法分类 内部排序算法又分为基于比较的排序算法和不基于比较的排序算法,其分类如下: 比较排序: 直接插入排序 希尔排序 (插入) 冒泡排序 快速排序 (交换) 直接选择排序 堆排序(选择&#…

32位处理器是什么意思
问题描述:朋友那个32位处理器,2的32次方算出来的单位是不是应该是4294967296位(bit)吧,怎么就成字节了呢?单位错了,那个32位是指32位地址总线,而不是32位数据。地址的数量单位是个&a…
【Codeforces】913C Party Lemonade (贪...)。
http://codeforces.com/contest/913/problem/C 这个题和以前见过的有点不一样,可以重复选择,这个有点emmm 首先将a数组优化,举个例子,如果1L20元,2L50元,那么将a[1]赋值为40,而不是50。 之后…
GDB 调试 Mysql 实战(二)GDB 调试打印
背景 在 https://mengkang.net/1328.html 实验中,我们通过optimizer_trace发现group by会使用intermediate_tmp_table,而且里面的的row_length是20,抱着"打破砂锅问到底"的求学精神,所以想通过 gdb 调试源码的方式看这个…

移动端AR的适用分析(二)
移动端AR的适用分析(二)1. 单目SLAM难点 2. 视觉SLAM难点 3. 可能的解决思路 单目slam的障碍来自于理论和实践两个方面。理论障碍可以看做是固有的,无法通过硬件选型或软件算法来解决的,例如单目初始化和尺度问题。实践问题包括计…

新的理念、 新的解决方案、 新的Azure Stack技术预览
Jeffrey Snover 我们很高兴地宣布︰ Azure Stack Technical Preview 2(TP2)已发布!我们朝着向您的数据中心提供Azure服务能力的目标又更近一步。自发布第一个技术预览版(TP1)以来,我们访问了很多用户&…

【HDU】1084 What Is Your Grade? (结构体 sort)
http://acm.hdu.edu.cn/showproblem.php?pid1084 题目的关键: 1、Note, only 1 student will get the score 95 when 3 students have solved 4 problems. If you can solve 4 problems, you can also get a high score 95 or 90 (you can get the former(前者)…

FastDFS之Linux下搭建
1.软件环境 CentOS6.5 FastDFS v5.05 libfastcommon- - master.zip(是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库) fastdfs- - nginx- - module_v1.16.tar.gz nginx- - 1.6.2.tar.gz fastdfs_client_java._v1.25.tar.gz 2.FastDFS集群规划 描述 …
Linux进程与线程的区别 详细总结(面试经验总结)
首先,简要了解一下进程和线程。对于操作系统而言,进程是核心之核心,整个现代操作系统的根本,就是以进程为单位在执行任务。系统的管理架构也是基于进程层面的。在按下电源键之后,计算机就开始了复杂的启动过程…

【HDU/POJ/ZOJ】Calling Extraterrestrial Intelligence Again (素数打表模板)
http://poj.org/problem?id1411 POJ http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode1689 ZOJ http://acm.hdu.edu.cn/showproblem.php?pid1239 HDU 都是同一个题,但是可能你在HDU上AC,在POJ和ZOJ上是TLE(所以还有待…

[AVR]使用AVR单片机驱动舵机
最近参加了三系举办的小车比赛(好像叫什么"驭远杯")。领导要求我驱动3-4个舵机。研究了几日,总算折腾出一个方案..、 1.舵机驱动的基本原理 (可以参考http://blog.sina.com.cn/s/blog_8240cbef01018hu1.html) "控制信号由接收…

高阶函数的使用
问题 字节跳动面试时问题:原函数例如fetchData是一个异步函数,尝试从服务器端获取一些信息并返回一个Promise。写一个新的函数可以自动重试一定次数,并且在使用上和原函数没有区别。 思路 这个问题其实不是很难,不过可能是太菜了紧…

内存溢出和内存泄漏的定义,产生原因以及解决方法(面试经验总结)
一、定义(概念与区别) 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请 了一个integer,但给它存了long才能存下的数,那就是内存溢出。 …

【Codeforces】716B Complete the Word (26个字母)
http://codeforces.com/contest/716/problem/B 给你一个字符串该字符串中是否存在长度为26且这26个字母没有重复 一个满足上述条件但是部分区域是问号的话,需要用剩下的字母覆盖掉问号,其余部分的问号可以随便赋值 没有的话输出-1 暴力即可。 #incl…

MySQL ERROR 1878 解决办法
MySQL ERROR 1878报错解决办法错误重现Part1:大表修改字段mysql> ALTER TABLE erp-> ADD COLUMN eas_status tinyint(3) unsigned NOT NULL DEFAULT 0 AFTER totalprice;ERROR 1878 (HY000): Temporary file write failure.mysql> \q这里可以看到,添加字…

共享程序集和强命名程序集(3):强命名程序集的一些作用
强命名程序集能防篡改 用私钥对程序集进行签名,并将公钥和签名嵌入程序集,CLR就可以炎症程序集未被修改或破坏。程序集安装到GAC时,系统对包含清单的那个文件的内容进行哈希处理,将Hash值与PE文件中嵌入的RSA数字签名进行比较。如…
堆和栈的区别(面试经验总结)
C中,内存分为5个区:堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈:是由编译器在需要时自动分配,不需要时自动清除的变量存储区。通常存放局部变量、函数参数等。 堆:是由new分配的内存块,由程序员…

百度Q3财报里的“大生意”
在今日发布的Q3财报中,百度花了不少篇幅来介绍人工智能业务的进展,作为百度的技术核心,近段时间几乎所有百度业务都在与人工智能做深入结合,这预示着移动互联网信息化技术发展已经全面开启人工智能时代,而百度势必要在…

【Codeforces/HDU】76A Plus and xor / 2095 find your present (2)(异或)。
http://codeforces.com/contest/76/problem/D A X Y B X xor Y 异或(不进位加法):两个二进制数,对应的位置上,相同为0,不同为1 性质:a^a0,a^0a,满足交换律 所以…

前端项目如何管理
前端项目如何管理 前端项目的管理分为两个维度:项目内的管理与多项目之间的管理。 1. 项目内的管理 在一个项目内,当有多个开发者一起协作开发时,或者功能越来越多、项目越来越庞大时,保证项目井然有序的进行是相当重要的。 一般会…