首页 文章 精选 留言 我的

精选列表

搜索[向后兼容性],共9018篇文章
优秀的个人博客,低调大师

向后兼容性增强和新的宏

以下由中文社区翻译,能力有限,如有翻译错误,欢迎指正! 在持续六个月的开发后,我们骄傲地宣布,Nim 1.2 版本发布了! 本发行版包含了超过 600 次的尚未被合并到 1.0.x 版本的提交。 与 1.0 相比,添加了几个新功能和标准库。 我们努力将断崖式的改动降至最低, 但如果不进行这些必要的更改,某些错误是无法被修复的, 而且我们认为我们的用户将从中受益。 我们建议所有用户升级和使用 1.2 版本。 使用多个版本的 Nim useVersion 如果你想要更新到 v1.2 版本,但依赖与 v1.0 版本的一些行为, 你可以使用命令行参数 --useVersion 来切换。 在最新的 Nim 中,你可以用这个参数来模拟之前版本的 Nim 。 举个例子,v1.2 版本的 Nim 对 proc 类型的类型转换变得更加严格。 如果这个变更无法兼容你的代码,你可以使用 --useVersion:1.0 来模拟之前版本的行为。 上面的例子只是个示例。 如果你依赖于一些边缘案例,或现已修复的错误行为,试试 --useVersion:1.0 ,他可能返回你想看到的结果。 如果没有得到你想要的之前版本的行为,请打开在 我们的 bug 追踪器 上提个 issue , 我们会努力在未来的 bug 修复版本(1.2.x)中进行修复。 when declared 如果你开发了 Nim 的库,而且想让不管是用 v1.0 的还是 v1.2 版本的用户都能使用你的库, 但却依赖了一些在 v1.0 版本没有,而在 v1.2 版本中才加入的新特性, 你可以使用 when declared 作为你的优势。 举个例子, sequtils 模块现在加入了 unzip 过程。 你就可以把你的代码写成下面这样: import sequtils when not declared(unzip): proc unzip*[S, T](s: openArray[(S, T)]): (seq[S], seq[T]) = result[0] = newSeq[S](s.len) result[1] = newSeq[T](s.len) for i in 0..<s.len: result[0][i] = s[i][0] result[1][i] = s[i][1] let a = @[('a', 1), ('b', 2), ('c', 3)] let b = unzip(a) # version 1.0 将会使用上方声明的过程 # version 1.2 会直接使用 sequtils 模块的过程 assert b == (@['a', 'b', 'c'], @[1, 2, 3]) 安装 Nim 1.2 Nim 的新用户 检查你系统的包管理器是否已经装载了 1.2 版本, 或者按照 这里 的说明进行安装。 老用户 如果你之前使用 choosenim 安装过老版本的 Nim , 升级到 1.2 版本就这么简单: $ choosenim update stable 为 v1.2 贡献力量 我们的贡献者都是超人, 我们列举了很多到 这里。 给你们个大大的么么哒,没有你们就没有这个版本! 新特性 GC: ARC 我们这次版本主要的新特性是 --gc:arc ! 为了避免陷入本文中大量的细节, 我们建议你查看下 FOSDEM上的这个视频(YouTuBe), Araq 在视频中解释了 ARC 背后的详细信息,并展示了一些显示其优点的基准。 之后可能会更新一篇关于 ARC 详细说明的文章。 新的宏语法糖 1.2.0 版本介绍了一些新的宏,它们应该可以帮你完成一些通用的任务。 在接下来的一些章节中,我们会给你展示他们和他们的用例。 所有的示例都意味着 import sugar。 Collect collect 是一个用以解析序列/集合/表解析的宏。 它替代了 lc (list comprehension,列表解析), 而且比 lc 更人性化和强大。 使用 collect 没有开销,比如说:你可以把 newSeqOfCap 和它配合使用。 所有集合的语法都是类似的,区别在于 init 函数和最后一个表达式。 举个例子: let numbers = collect(newSeq): # 或者: collect(newSeqOfCap(10)) for i in 1..10: i assert numbers == @[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] import tables let oddSquares = collect(initTable): for i in numbers: if i mod 2 == 1: {i: i * i} assert len(oddSquares) == 5 assert oddSquares[7] == 49 import sets let oddOrNegative = collect(initHashSet): for i in numbers: {if i mod 2 == 1: i else: -i} assert 5 in oddOrNegative assert 2 notin oddOrNegative assert -2 in oddOrNegative Dup dup 是一个宏,它让原地函数(in-place functions,译者注:引用传递参数的函数) 可以在不影响和修改函数输入的情况下返回结果。 我们是这么考虑的,Nim的未来版本将只提供函数的原地版本 (即不再提供 sort 和 sorted、rotateLeft 和 rotatedLeft 等), 他们可以被 dup 转换为返回拷贝的函数。 这些版本可以通过 dup 转换成返回副本的函数。 这个宏也允许了(其他方式的)函数链(function chaining)。 还是看示例吧: proc makePalindrome(s: var string) = for i in countdown(s.len-2, 0): s.add(s[i]) var a = "abc" makePalindrome(a) assert a == "abcba" var b = "xyz" var c = b.dup(makePalindrome) assert b == "xyz" assert c == "xyzyx" 下划线(_)可用于表示传递参数的位置: import algorithm # b = "xyz" var d = dup b: makePalindrome # xyzyx sort(_, SortOrder.Descending) # zyyxx makePalindrome # zyyxxxyyz assert d == "zyyxxxyyz" Capture ‎capture 是一个宏,在循环中创建闭包时非常有用, 以捕获一些局部循环变量(按其当前迭代值)。 您可能希望将其用于事件处理和 {int: callBack} 查找表。‎ 举例如下: import strformat, sugar var myClosure: proc(): string for i in 5..7: for j in 7..9: if i * j == 42: capture i, j: myClosure = proc (): string = fmt"{i} * {j} = 42" let a = myClosure() assert a == "6 * 7 = 42"

优秀的个人博客,低调大师

通信产业2017走向后摩尔时代

刚刚过去的2016年,是信息通信业值得纪念的节点年,是信息通信业承上启下的关键年。这一年,人工智能概念提出60周年、计算机应用60周年、光纤发明50周年、蜂窝移动通信应用40周年,亦是摩尔定律走过了51年的一年。 60年以来,以计算机、IC、光纤通信、移动通信为代表的信息技术引发的第三次科技革命浪潮深刻推动了人类社会政治、经济和文化领域的变革。 如果说过去的60年是IT+CT的时代,那么接下来的60年便是IT+CT+DT的时代。IT+CT+DT的融合孕育了大数据时代与人工智能时代,为网络技术发展带来了新动能,为提升网络容量、个性化服务水平和更好的用户体验开拓了空间,也为未来颠覆性技术的出现打下了基础。 IC发展50余年,互联网发展20余年,这些技术经过不断自我完善,仍然引领网络技术创新。大智移云(大数据、智能化/物联网、移动互联网、云计算)将成为ICT融合创新平台。而5G、软件定义一切、移动边缘计算等新生技术力量将驱动信息通信业进入后摩尔时代。 趋势一: 10/7nm引领IC创新 ICT的创新从“芯”开始。多年以来,摩尔定律主导半导体行业的发展,越来越小的芯片也使得ICT的各种创新变为可能。 2015年中国SMIC公司实现28nm工艺量产,Intel、TSMC和三星2015年已量产16/14nm工艺,预计2017年可发展到10/7nm工艺。虽然在CES2017上,高通已经带来了10nm FinFET制作工艺的骁龙835处理器。不过10nm处理器规模商用还有待时日。 尽管目前摩尔定律遇到发展瓶颈,但石墨烯、铁基硅基等新材料的应用有望引导ICT行业走入后摩尔时代。 趋势二: 大数据、深度学习开启人工智能第三次浪潮 2016年,人工智能走过了60年。这一年,对于人工智能领域来说,最为兴奋的事件莫过于AlphaGo战胜人类围棋高手李世石,可以说是全球人工智能界承上启下的里程碑式事件。 AlphaGo采用改进的蒙特卡洛决策树算法与深度神经网络算法相结合构建深度学习系统,在收集到的围棋棋谱基础上还通过自我对局三千万盘的方式训练,得到了完整的围棋程序。 随着前60年有监督深度学习算法的理论研究和工程化的成熟,以及硬件计算能力的大幅提升和成本的飞速降低,在云计算、大数据和移动互联网的融合推动下,人工智能将迎来第三次发展浪潮。 趋势三: 未来互联网体系—网络IT化 延续多年的互联网架构将发生彻底的变革,朝着IT化演进,要实现从互联网应用被动适应网络向网络主动、快速、灵活适应互联网应用的根本转变。 无论是SDN/NFV和云计算,还是切片,抑或是移动边缘计算,都是为了让网络更加智能化,使得网络资源的分配将基于对内容、用户和位置的感知。2017年,运营商将继续推动网络的重构。 趋势四: 5G和RAN的切片化 不同于过往任何一种网络,5G最大的特点就是可以提供丰富的应用场景,从虚拟现实、增强现实到无人驾驶,再到工业自动化乃至层出不穷的垂直化应用。不同的应用场景对5G提出不同需求。网络切片可以让运营商在一个硬件基础设施切分出多个虚拟的端到端网络,每个网络切片从设备到接入网到传输网再到核心网在逻辑上隔离,适配各种类型应用场景的不同特征需求。邬贺铨认为,网络切片将是5G核心网和接入网的理想网络架构。 趋势五: 软件定义一切 软件定义网络、软件定义存储……未来,软件将在智能社会中发挥越来越重要的作用。 1972年,阿波罗登月飞行器软件仅有4K的代码,日本高铁的列控软件有数百万行代码,而如今雪佛兰、奔驰推出的新车中的软件代码就达到1000万行到1亿行,空客飞机的软件代码则高达10亿行。 中国2015年软件和信息技术服务业占电子信息产业比重28%,实现软件业务收入4.3万亿元,同比增长16.6%,2020年规划达到8.8万亿元。 趋势六: 移动边缘计算抢风口 为了适应视频业务、VR/AR与车联网等对时延要求、又不希望视频业务大量消耗无线资源和带宽,需要将网络存储和内容分发下沉到接入网;核心网用户下沉到基站,即实现基站与互联网业务深度融合。据华为预测,未来超过50%的数据需要在网络边缘侧分析、处理与储存。 移动边缘计算有利于运营商提供差异化服务。2017年,设备商会积极在移动边缘计算领域抢占风口,为未来的视频时代积蓄力量。 趋势七: 区块链技术保物联网安全 区块链技术源自2008年年底提出的比特币技术,以网络节点共同完成网络监督的方式来保证信息的真实性和不可篡改性。 区块链技术将在物联网中得到规模应用。由于区块链去中心化与加密,避免了数据中心被攻击或被内部人员控制而导致的物联网信息的泄露,特别是当物联网收集个人隐私信息时尤其严重。 区块链叠加的智能合约技术可将智能设备变成可自我维护调节的独立个体,可在事先植入的规则合约基础上执行和其他类似个体交换信息和核实身份等功能。 趋势八: 容器技术加速云落地 在Windows上同时运行两个或多个进程时,因使用共同的资源会互相干扰。在Linux环境下也有类似的问题。使用虚拟化的方法可以实现“隔离+运行环境打包”,但每个进程镜像里需要包含一个OS,提及过大且管理和运行的效率低。 容器就是共享OS内核的隔离支撑环境,每个容器运行在完全独立的根文件系统里,每个容器拥有自己的虚拟接口和网络地址,为每个进程容器分配不同系统资源。 容器技术的应用将加速云业务的落地,而且在智能终端上使用容器技术将改进用户体验。 本文转自d1net(转载)

优秀的个人博客,低调大师

Android设备兼容性 2

版权声明:本文为sydMobile原创文章,转载请务必注明出处! https://blog.csdn.net/sydMobile/article/details/78144278 文章最早发布于我的微信公众号中,欢迎大家扫描下面二维码关注微信公众获取更多干货资源。 本文为sydMobile原创文章,可以随意转载,但请务必注明出处! 翻译自Android官方文档加入了自己的理解! Controlling Your App’s Availability to Devices 控制你的程序的可用性在不同的设备上 Android supports a variety of features your app can leverage through platform APIs. Some features are hardware-based (such as a compass sensor), some are software-based (such as app widgets), and some are dependent on the platform version. Not every device supports every feature, so you may need to control your app’s availability to devices based on your app’s required features. Android支持许多的功能,你的APP可以通过API充分的利用这些功能。一些功能是硬件作为支持(比如指南针传感器),一些是软件作为支持(比如APP小空间),还有一些依赖于平台的版本(也就是Android平台的版本)不是每个设备都支持Android的所以功能。所以你需要根据你的app所需要的特点来控制你的APP的实现。 To achieve the largest user-base possible for your app, you should strive to support as many device configurations as possible using a single APK. In most situations, you can do so by disabling optional features at runtime and providing app resources with alternatives for different configurations (such as different layouts for different screen sizes). If necessary, however, you can restrict your app’s availability to devices through Google Play Store based on the following device characteristics: 为了让你的APP实现最大的用户量,你应该努力的去支持大量的设备通过用一个APK,在大多数情况下,你可以舍弃一些不必要的功能提供一些在不同设备上必须的资源(比如为不同的屏幕尺寸添加不同的布局文件,这就是屏幕适配的一种方式)如果有必要的话,你也可以通过Google Play来限制一些不可以使用的设备。 Device features 设备特点 In order for you to manage your app’s availability based on device features, Android defines feature IDs for any hardware or software feature that may not be available on all devices. For instance, the feature ID for the compass sensor is FEATURE_SENSOR_COMPASS and the feature ID for app widgets is FEATURE_APP_WIDGETS. 为了让您根据设备功能来管理应用的可用性,Android定义了所有设备可能无法使用的任何硬件或软件功能的功能ID。 例如,罗盘传感器的功能ID为FEATURE_SENSOR_COMPASS,应用程序小部件的功能ID为FEATURE_APP_WIDGETS。 If necessary, you can prevent users from installing your app when their devices don’t provide a given feature by declaring it with a element in your app’s manifest file. 如果需要,您可以通过在应用程序的清单文件中使用元素声明该设备,从而避免用户安装应用程序。 For example, if your app does not make sense on a device that lacks a compass sensor, you can declare the compass sensor as required with the following manifest tag: <manifest ... > <uses-feature android:name="android.hardware.sensor.compass" android:required="true" /> ... </manifest> 例如,如果您的应用在缺少罗盘传感器的设备上无效,则可以根据需要使用以下清单标签声明罗盘传感器: Google Play Store compares the features your app requires to the features available on each user’s device to determine whether your app is compatible with each device. If the device does not provide all the features your app requires, the user cannot install your app. Google Play商店将您的应用所需的功能与每个用户设备上的功能进行比较,以确定您的应用是否与每个设备兼容。 如果设备没有提供您的应用所需的所有功能,则用户无法安装您的应用。 However, if your app’s primary functionality does not require a device feature, you should set the required attribute to “false” and check for the device feature at runtime. If the app feature is not available on the current device, gracefully degrade the corresponding app feature. For example, you can query whether a feature is available by calling hasSystemFeature() like this: PackageManager pm = getPackageManager(); if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) { // This device does not have a compass, turn off the compass feature disableCompassFeature(); } 然而,如果您的应用程序的主要功能不需要设备功能,则应将所需属性设置为“false”,并在运行时检查设备功能。 如果应用功能在当前设备上不可用,则会适当地降低相应的应用功能。 例如,您可以通过调用hasSystemFeature()来查询功能是否可用: For information about all the filters you can use to control the availability of your app to users through Google Play Store, see the Filters on Google Play document. 有关所有过滤器的信息,可以通过Google Play商店来控制用户的应用程序的可用性,请参阅Google Play上的过滤器文档。 Note: Some system permissions implicitly require the availability of a device feature. For example, if your app requests permission to access to BLUETOOTH, this implicitly requires the FEATURE_BLUETOOTH device feature. You can disable filtering based on this feature and make your app available to devices without Bluetooth by setting the required attribute to “false” in the tag. For more information about implicitly required device features, read Permissions that Imply Feature Requirements. 注意:某些系统权限隐含地要求设备功能的可用性。 例如,如果您的应用程序请求访问BLUETOOTH的权限,则会隐式地需要FEATURE_BLUETOOTH设备功能。 您可以根据此功能禁用过滤,并通过在标签中将所需属性设置为“false”,使您的应用程序可用于无蓝牙设备。 有关隐式需要的设备功能的更多信息,请阅读具有要求功能要求的权限。 未完待续…. 扫一扫关注微信公众号,获取更多干货和资源。

优秀的个人博客,低调大师

一种面向后端的微服务低代码平台架构设计

作者:京东科技常姜洲 一、背景 近期参加公司组织的极客中餐厅训练营,我们所在的小组接到的课题是微服务的低代码平台架构设计。目标是:结合京东业务研发实际情况,针对后端研发人员,设计一个微服务低代码平台,助力更高效低交付业务需求。现已结业,将我在本次项目中沉淀设计出的设计文档整理成文,期待与大家有进一步的碰撞沟通 二、低代码平台整体技术架构设计 1、低代码开发三阶段 平台为开发者的三个阶段提供的核心功能: 1. 开发阶段:服务编排能力,提供可组合的方式绑定事件源和事件消费者(函数、API、数据源管理等基础能力) 2. 部署阶段:生成、托管、获取、构建和打包代码。 3. 运维阶段:为 Serverless 应用提供部署和服务支持。提供友好的日志系统,能够帮助平台工具使用者快速定位问题,提供对各种使用中间件状态监控,避免工具平台成为一个黑盒子 整个3阶段如下图所示:  2、低代码平台功能架构设计  角色与主功能说明: 本低代码开发平台的服务对象为开发者,旨在使用低代码开发平台,进行快速的微服务应用开发与部署,相对于传统的开发与部署方式减少研发时间,降低成本 Low Code 开发面板: 提供整个低代码应用开发生命周期的全功能的运营后台面板,可以在此面板完成开发阶段的各项配置、流程编排、脚本编写与调试、部署等功能。 Low Code 控制面板: 提供各种服务治理,告警配置管理,配置管理等服务控制功能模块 基础功能说明: • 提供触发器、脚本函数、可视化函数的、连接器的开发与管理 • 提供多环境配置文件隔离 • 提供应用维度、函数维度监控相关配置 • 提供应用工程所有源文件、各环境配置数据的的版本管理 部署功能说明: 提供在线构建应用工程,在线调试函数、触发器、连接器等功能,调试完毕后可一键进行发布 特色功能: 为进一步提升业务域功能复用度,进一步减少重复功能开发的成本,同样提供基于模板,函数扩展点等功能的快速复用湖开发 依赖: • 方便与JSF体系内的服务更好的融合,接入JSF注册中心API,进行JSF注册服务的信息获取 • 与统一配置平台打通进行在线配置变更的存储与变更,平台基础配置的存储与变更 • 存储层,元数据使用关系型数据库存储,流程文件、资源文件使用对象存储,源代码等文件使用git管理或者对象存储 • 监控功能依赖贡献现有的监控平台 UMP 、SGM的 的OPEN API 实现 • 日志平台,公司的日志平台暂无OPEN API 可以共建、或者私有化部署一套实现 3、低代码应用开发流程  应用生命周期4阶段 开发与测试、构建保存、发布、运行 1. 用户在编辑器中完成触发器、连接器、函数等主要低代码构件,可能复用已有模板和业务域能力进一步为开发提速 2. 开发完成后可以根据属性配置、语言环境构建打包函数镜像,同时生成版本号。 3. 发布版本,完成部署。 4. 应用实例在运行时提供服务 广义流程编排 • 可视化创建连接器 • 可视化创建触发器 • 支持可视化创建函数流程,BPMN, 流程节点可以是函数实体或者连接器实体,流程关系支持表达式编辑 • 支持脚本编写创建函数,支持多语言:Groovy,Java • 支持多环境配置信息配置 • 支持配置通用函数、触发器、连接器等监控,健康度指标收集配置 4、低代码平台技术架构  1. 蓝色部分是我们平台重点建设的应用 2. 流量入口主要分为京东内外部两种流量入口 3. 对于HTTP接口上层可以对接成熟的网关转换为对低代码应用的JSF调用即可,此部分本身已经实现 0代码,无需重复建设 4. 对于JSF接口可以使用低代码应用的JSF接口触发器调用 5. 监控与告警主要还是以复用公司内部组件为主,基于OPEN API 封装 6. 下层主要依赖其他业务部门提供的JSF接口、各大中间件、存储层以及外部的一些HTTP接口、特殊协议的接口,消息等 5、低代码平台应用部署架构  1. 每个低代码平台的应用都有一个代理服务(LC proxy)负责和平台通信,指令下发,数据上报等 2. 低代码应用不改变现有应用的通信方式和现有的JSF接口、数据库、缓存等中间件使用原有方式通信 3. 控制中心:负责给 proxy 发控制指令,配置指令、服务治理指令等 4. 数据收集中心:负责收集低代码运行时配置的健康度指标源数据、流量等其他运行数据收集 6、低代码平台各角色系统工作机制   7、低代码平台单机应用架构 单机运行环境简介  单机应用架构  1. 低代码平台单机应用为1个JVM 进程,和监控agent 、日志 agent 等agent进程一同部署在容器、或者KVM、物理机等OS 环境中 2. 平台应用本身核心 1. low code proxy ,提供平台api接口,接受平台的指令,如:发布指令,接受到发布指令后去相关的存储服务拉取元配置信息和函数脚本、触发器、连接器配置、配置文件等低代码应用的源文件 2. 执行引擎,负责对低代码应用连接器的加载、函数加载、触发器配加载,加载完成后对外提供服务,等待各种触发器的流量触发、 3. 低代码应用核心构件 1. 触发器为应用的流量入口:如接口、MQ消费者,定时任务回调等等,平台支持自定义触发器开发 2. 函数为业务逻辑的编排,可以是特定语言的函数脚本,可以是bpmn组合的流程文件, 3. 连接器负责和下游RPC接口,存储数据源、中间件平台的消息通信 4. 多环境配置信息提供不同环境的参数配置 5. 以上几个核心构件的有机组合共同在应用层基础能力至之上提供了 4. 低代码应用作为一个运行单元被发布到平台应用中 三、低代码平台详细设计 由于是小组共创设计,我在详细设计中主要负责了连接器与触发器的设计部分,其他如函数、配置部分的设计与此详细设计这里不再赘述。大概思路如下 函数:支持各种语言的表达式函数、支持BPMN可视化流程编排 多环境配置:需要支持测试、生产、预发等环境配置文件 日志: 支持平台开发者自定义日志是否打印,打印格式,是否有掩码等 1、连接器的设计 连接器定义  1. 在一个低代码应用中连接器主要负责和其他业务方提供的RPC服务、中间件、存储等实体进行通信的组件 2. 可以在脚本函数中直接调用连接器,也可以在流程函数中直接调用连接器 3. 连接器支持其他未知新协议的制定 连接器的0代码开发与部署流程   2、自定义连接器  1、为了适应内外部不同的连接器诉求,平台提供自定义触发器的能力 2、预留使用连接器使用的配置信息,为引入的通信中间件预留未来使用该触发器的使用方需要0代码配置的配置信息,如数据库的地址,账号密码等信息 3、连接器需要实现平台提供的API,这样以便函数或者触发器可以直接调用该连接器 4、调试无误后保存触发器,提交平台审核,审核通过后平台可上架该触发器 3、自定义触发器  1、为了适应内外部不同的触发器诉求,平台提供自定义触发器的能力 2、预留使用触发器使用的配置信息,为引入的通信中间件预留未来使用该触发器的使用方需要0代码配置的配置信息,如JSF的接口地址,别名等 3、使用纯代码写出该触发器的源代码,并预留调用低代码函数的入口,以便将来使用该触发器的使用者可以0代码配置触发器所调用的函数 4、调试无误后保存触发器,提交平台审核,审核通过后平台可上架该触发器 四、低代码应用源文件  a、元信息,0代码,包含低代码应用的0代码开发部分的触发器元信息、连接器元信息 1、触发器配置信息: ▪ 通信中间件所需要的各个参数,接口名等等 ▪ 调用函数的函数名称 ▪ 是否打印日志,日志是否脱敏 2、连接器配置信息 ▪ 通信中间件所需要的各个参数,密码,用户名等等 ▪ 是否打印日志,日志是否脱敏 b、源文件,0代码,包含:流程文件、脚本文件 ◦ 可视化流程编排产生的源文件,如bpmn流程文件 ◦ 脚本编码产生的脚本文件,如自定义java函数 c、多环境配置,0代码,包含各个环境的配置文件 ◦ 开发环境、生成环境的各个配置信息等,配置信息可以在触发器、函数、连接器中使用引入使用 d、日志组件配置 ◦ 日志打印输出格式 ◦ 日志输出路径 ◦ 全局脱敏字段,脱敏正则 e、监控组件配置 ◦ 监控埋点打印路径 ◦ 监控埋点打印格式 d、低代码平台应用底座: 执行引擎、LC Proxy、中间件依赖的jar、应用框架springboot的jar等,这部分跟随不同的构建部署方式为可选项 五、低代码应用的构建部署方式   1、源文件热部署 这种方式应对于低代码平台的租户使用低代码平台所有集群的共享资源,选取一部分可用资源以后在控制面板进行选择发布,可以使用指定ip的模式应对相关权限问题,也可以不指定ip使用平台自定义分配。 ▪ 受平台资源调度管控,参考上周控制面板的功能 ▪ 日志与监控埋点由 LC Proxy 采集到平台提供的日志平台和监控平台 2、构建jar包、war包 这种方式应对于有自己的主机用户,拿到成品后即可部署无状态应用,打的包中不包含LC Proxy部分,执行引擎在应用启动的时候自动加载包中特定路径的流程文件、脚本文件等。 ▪ 日志打印到特定目录,供用户自己的日志采集器采集 ▪ 埋点文件按照特定格式打印到特定目录,供自己的日志采集器采集 3、构建镜像 这种方式应对于有自己的容器用户,拿到成品后即可部署无状态应用,打的包中不包含LC Proxy部分,执行引擎在应用启动的时候自动加载包中特定路径的流程文件、脚本文件等。 ▪ 日志打印到特定目录,供用户自己的日志采集器采集 ▪ 埋点文件按照特定格式打印到特定目录,供自己的日志采集器采集 4、低代码平台和部署平台的关系 ◦ 内部 ▪ 内部部署的低代码平台为了方便各业务方灵活使用,平台提供两种能力 ▪ 1、共享资源模式:平台租户共享平台资源池,适用于消耗资源不大并发量不高的应用, 使用低代码平台本身提供的日志平台、监控平台结合做到各个维度的立体监控 ▪ 2、自定义资源模式:平台对接体系内的JDOS平台,可以将低代码应用与JDOS应用进行关联,使用在JDOS平台申请的应用进行部署。这种方式提供单独的镜像文件进行部署,可结合体系内的日志中间件、监控平台, 与低代码平台本身提供的日志平台、监控平台结合做到各个维度的立体监控 ◦ 外部 ▪ 外部需求为成品包的时候,只需要构建出 如上所述的 jar、war供其下载即可 ▪ 外部需求为低代码平台私有化部署的时候,需要将方案设计中的几大应用为用户做私有化部署 六、一些问题的思考与收获 1、扩展性不仅仅是在某一项功能上的扩展,站在全局视角看在架构设计中所有产品功能理论上都要尽可能考虑模块化,可插拔,进而搭积木成平台化,真正做到全场景和全链路可扩展 2、团队小伙伴对HTTP 触发器的设计输出,让我联想到 JSF注册中心等通用类注册中心都要解决的高可用问题,举一反三,同场景的同类解决方案的核心问题是相通的 3、对于未来业务发展生命周期没那么长,数据要求没有强隔离诉求的场景,能否基于数据模型做一层数据层的0代码开发? 4、流程驱动的低代码可以和数据驱动的低代码很好地结合起来 5、低代码平台产出物的多样化,为之后交付项目的产出物打开了思路,很多时候要站在客户角度考虑,客户的应用场景是什么,需要什么,那么我们就提供什么,张宇轩单元可跑,也可圈定某一部分功能集合,打包输出  低代码平台适合的场景的一些思考 1、可以应用在上层营销系统的开发中 2、可以用在流程较为通用的场景如:消息转化、数据统计、接口转发 3、可以应用在已有成熟的业务线进行外围的业务开发,如支付、结算等稳定系统上层要做一些简单业务编排的场景用 4、 面对同样一个业务需求是使用低代码开发还是使用纯代码开发,没有明确的可量化的分水岭,但是建议尝试,从中获到提效之后下一次面临需求的时候就会有较为明确的答案 案例1:我们曾在一个上层营销活动系统重尝试基于表达式引擎做了一个半配置化的活动配置系统(那个时候还没听过低代码这个词),现在想来算是比较原始的支持低代码系统,上新一个活动原本需要3个人日的开发量,基于对以往流程的复用,使用脚本语言,使用表达式进行编排和发布,0.5人日就搞定了,且系统无需重新发布。不得不说在合适的场景,低代码还是非常有空的。 案例2:大促的时的业务数据大屏的制作相信很多人都经历过,我们最近两次大促采取的方案都是使用星链对已有的数据接口和新的数据指标进行简单编排加工,提供JSF服务,再结合我们内部的网关系统将接口协议转化为HTTP, 直接在展示平台(如莫奈大屏)上直接使用,大促过后资源也可随之释放,非常方便与高效,同时也降低了研发成本 七、结语 参加训练营后还是有一些感触想分享给大家 1、感谢马老师的指导和各位评委老师的指点,感恩大家的信任,感谢同组的大佬们,从大家身上学习到不同的思路。每个人来此不同团队,通过和大家的讨论,发掘了很多新的看待产品与架构的视角 2、流程驱动的低代码平台可以和数据驱动的低代码以及部分0代码开发组件可以很好地有机整合成统一的低代码平台,进一步提升研发效率 3、整体感觉训练营节奏紧凑,干货满满,架构设计方面对平台扩展性的思考充分得到训练

优秀的个人博客,低调大师

Android的兼容性问题剖析

1.PC是X86构架,主要生产厂是Inter和AMD,android智能手机基本上都是ARM构架,主要生产厂家有高通、三星、NVIDIA等,也不是很多,所以架构方面应该不是导致碎片化的主要原因才是啊?或许我理解的问题? 架构方面是一个重要原因。 x86架构从当年8086开始,到如今的x64的64位平台,能做到汇编指令完全兼容。 再看看ARM架构有多混乱: ARM处理器内核列表 x86架构的字节序是固定的,而ARM架构的字节序都是可变的,字节序就是大小端的意思,比如一个32位的数据:0x12345678,在x86架构下,内存里永远都是0x78 0x56 0x34 0x12,而在ARM架构里,可能是前者,也可能是0x12 0x34 0x56 0x78. 字节序本身没有什么优劣之分,但对于开发人员来说,可变的字节序意味着移植机器代码是有困难的。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册