企业网站建设可行性分析,企业网站的建设规划,莱芜最新莱芜话题,政务服务网站建设运行情况背景
有赞是 SaaS 公司#xff0c;向商家提供了全方位的软件服务#xff0c;支撑商家进行采购、店铺、商品、营销、订单、物流等等管理服务。
在这个软件服务里#xff0c;能够满足大部分的商家#xff0c;为商家保驾护航。
但是很多大商家往往会有自己的特殊需求#xff…背景
有赞是 SaaS 公司向商家提供了全方位的软件服务支撑商家进行采购、店铺、商品、营销、订单、物流等等管理服务。
在这个软件服务里能够满足大部分的商家为商家保驾护航。
但是很多大商家往往会有自己的特殊需求如使用自己的优惠券、分期支付、定制的商品详情页、定制下单流程等等为了能够满足这样的需求让商家有更多的可能性我们提供了很强的扩展能力这是电商云的核心。
概述
前面提到为了满足商家的定制需求提供商家更多可能性的能力我们需要提供很强的扩展能力扩展能力简单来说就是用代码开发扩展服务然后通过界面配置来编排扩展服务。
用代码开发扩展服务我们需要有一个应用框架来支持扩展服务代码的开发。
应用框架
应用框架包含代码部署、应用开发框架、应用运行框架。
看到这里应该会提出几个问题代码部署在哪里扩展服务或者扩展点是什么
扩展点是什么
扩展点是由有赞核心系统定义的一组扩展 API 分为业务扩展点、消息扩展点和前端扩展点。
业务扩展点
从技术上可以理解为 Java 的 SPI 举个例子有赞核心系统价格中心提供了附加费用计算扩展点对于 Java 程序来说这就是一个接口类开发者自己写一个实现类去实现该接口并在我们的控制台上进行相应的配置生效后那么在进行价格计算时会调用开发者编写的 附加费用计算扩展点实现类形成的结果就是在标准价格计算之外再会加上开发者实现类返回的附加费用比如额外的关税、境外的运输费等等。消息扩展点
一样的消息扩展点从技术上可以理解为 Java 的 SPI。从命名上可以看出它是用来传递消息的也就是说这个扩展点不会影响业务主流程。比如有消费者进入店铺了商家希望获得这个消息可以做一些事情去尽可能的挽留消费者比如有消费者下单成功了通过对应的消息扩展点发送一个消息商家可以自己去做些更有价值的事情。前端扩展点
业务扩展点和消息扩展点对应的都是后台逻辑我对某个页面如下单页不满意或者想扩展里面的组件或者想自己添加一个组件怎么办前端扩展点给了开发者进行完全前端定制的能力这里举两个例子来说明
拓展官方组件在下单页面上有下单按钮下单按钮原有的逻辑是下单但是下单按钮的事件它是一个前端扩展点这个时候开发者就可以实现这个扩展点在下单的过程中做点好玩的事情比如蹦出个好玩的动画、请求后台的额外接口做些事情等等添加自定义组件如在下单页添加个组件添加一个商品推荐的组件。
代码部署如图中所示横线粗黑线上方是电商云部分的服务和操作区下方是开发者的操作区。
这里的代码提交和正常的 Git 管理代码方式不太一样所以这个图也复杂一点
电商云的 Git 仓库不做代码管理这个仓库的用途主要是用来初始化工程代码和进行代码部署。代码从电商云 Git 仓库拉下来之后开发者可以使用自己公司内部的 Git 去管理该项目开发完成后再提交到电商云的 Git 仓库。在提交电商云 Git 仓库时只能提交 master 分支。提交到电商云 Git 仓库后可以去电商云控制台进行代码发布部署到服务器上。
所以在这个工程中会发现电商云 Git 不承担团队管理、分支管理等等功能他的作用主要是用来发布。
代码开发框架整体的 App 是一个 youzan-boot 项目整体框架分两部分内部核心模块和外部定制模块两个模块单独维护单独开发互相隔离。
内部核心模块
这是一个可以单独运行的模块在该模块里有很多子模块定义了接口、工具类、实现类等等除此之外还有应用启动器这个模块的开发由有赞内部的开发人员负责开发实现内容外部不可见那么我们会在这个模块里做哪些事情呢
定义标准编写接口供外部开发者依赖实现编写监控实现来监控应用框架以及外部定制模块编写dubbo服务注册发现组件编写自动化数据源和orm框架支持基础配置信息各类工具其他。
这么做的好处是什么
开发者只关注如何使用不需要关注实现内部核心模块有些部分会和我们核心域通信隔离保证安全我们内部开发人员更懂我们自己的环境我们来进行一些通用配置更加简化开发者的学习成本必要时候可以限制开发者的行为我们可以改变底层实现如缓存模块从redis换成zankv等等可以在未来定制一些符合有赞体系的组件如用户session等而用户不需要去感知不需要去改代码就能直接用。
外部定制模块
这个模块是通常意义上的 App 也就是开发者可见并进行开发的 App该模块同样有很多子模块可以理解为正常的一个业务项目只不过没有启动器没有启动框架内部核心模块启动时会加载本模块。通过上图可以看到这个外部定制模块跟一般的 Maven 没什么区别:电商云 App 是一个 maven 项目根 pom 的 parent 是 cloud-parent cloud-parent 管理了 spring-boot、spring、jdk、内部对外的 API 等框架和 API 的版本。所以在 App 开发过程中开发者依赖这些体系的jar包时不需要指定版本。
扩展点开发扩展点开发是基于 Maven 框架去做的有赞内部通过电商云把扩展点接口发布到有赞云 Maven 仓库开发人员在本地配置有赞云 Maven 仓库后就可以拉取扩展点接口包进行扩展点实现的开发。
代码运行框架上图中可以看到开发者将外部定制模块开发完后通过电商云控制台进行发布此时会将 App 打成一个 Jar 包发到服务器上发布系统会启动内部核心模块在启动时内部核心模块会启动 Aladdin 有赞Jar包加载容器Aladdin 会将外部定制模块的 Jar 包加载进来启动里面的业务逻辑完成发布。
为什么这么做
其实前面讲了很多 App 的总体框架也讲了一些这样做的好处这里主要列举三点来阐述一下组件开放、组件升级和安全性。
组件开放在设计电商云应用框架时考虑到的一点就是如何更便捷更快速的把我们有赞的能力开放出去如何做更新的迭代如今天开放了数据库组件、明天开放队列服务如何做到先准备后开放如何让开发者的接入成本最低
有赞内部其实有很多很好的组件有些可以开放在开发者有些可能无法开放。同时开源也有很多组件如何把这些能力集成到电商云平台上
经过讨论和思考决定以接口声明的模式对于 Java 来说就是 Interface Jar包对外提供服务。
这种方式对于开发者来说是非常便捷的结合电商云控制台来完成组件申请和配置初始化开发者只需要在代码里写 Bean 注入代码就行比如 RedisAutowire private RedisTemplate redisTemplate; ................ ...............
如上所示开发者只需要写这样的代码就可以使用无需关注配置也不需要做太多的依赖。
组件开放也很简单
编写SDK按一定规范编写电商云Interface将SDK实现放在内部核心模块并使用电商云组件配置加载逻辑初始化SDK提供简单文档供开发者使用
在这个过程中由于电商云组件的使用方式是统一的都通过一定规范的 Interface 开放所以不需要做太多的 SDK 兼容去兼容开发者各种各样的使用场景。
开发者也只需要一种学习姿势不会遇到不同的组件用不同的方式的困惑。除此之外也建立了电商云组件开放的规范。
组件升级有赞通过 Interface 的方式对外开放组件服务那么该组件的实现类就会落到内部核心模块里也就是说我们的服务实现对于开发者来说是个黑盒有赞来负责对这个实现的开发、监控、管理在未来的发展过程中由于一些原因可能需要对实现进行修改和升级这是很正常的情况通过这种模式开发者无感开发者只关注业务扩展、方案实现。
组件的实现方式也分两种一种是组件的实现源码直接写在内部核心模块工程里另一种是单独一个 Jar 包(内部核心模块依赖这个 Jar 包)。
对于第二种模式有赞有对应的 Jar 包管理工具 Aladdin在应用启动时会匹配当前版本是否为最新版本不是的话就会升级。
同时在这个开发过程中假如核心模块和外部模块都依赖了同一个 Jar 包但是不同的版本怎么办 Aladdin 也会去识别出来只加载一个版本。
安全性
组件安全
对于开发者可见的只有自己的业务代码组件对于开发者来说是个黑盒开发者无法去对组件实现植入代码这样保证了组件实现的安全可控运行。
如果不是这种模式而是将组件作为一个client开放给开发者首先开发者能够看到我们组件的逻辑第二个能够对组件实现做一些入侵如修改字节码。
数据安全如上图所示app-biz 即开发者部分的 App和有赞进行实线连接的只有我们提供的接口层Java 的 Interface接口层的实现由 App 基础框架来负责来访问配置、访问数据库、访问缓存。
虽然每个 App 的数据库、缓存等等相互之间是隔离的但是他们可能都在一个机房或者一个网络环境如果不做这种封装让 App 直接访问这些资源很难保证不会对其他 App 的数据库、缓存等等造成影响或者攻击。
目前这种模式天然的保证了每个 App 的私有资产的安全性。
展望
电商云目前处于开荒后的创世阶段我们希望能够让开发者和商家有更多的可能性那么落到应用框架上就需要有更多的灵活性和更多的能力来支持。
首先、完善组件开放更多的组件
第二、支持多语言目前不管是组件还是应用框架都只支持 Java
第三、支持本地运行前面讲到 App 无法自己运行也就说明 App 无法在开发者本地运行所以未来要支持本地运行
第四、支持远程调试
第五、完善应用框架如监控、热加载等等
其他……
创世阶段需要更多人才也希望各路神仙加入展现绝技。
转载自公众号“ 有赞coder”https://mp.weixin.qq.com/s?__bizMzAxOTY5MDMxNA\u0026amp;mid2455759241\u0026amp;idx1\u0026amp;snad486d10a00e0cf063e20a028e441a28\u0026amp;chksm8c686facbb1fe6bab4a951c0a9adc44626d7e78b61ceb66d1c4f19838c992e4c98616fbea0a4\u0026amp;scene21#wechat_redirect