GithubHelp home page GithubHelp logo

yoga's Introduction

Yoga是一套定位于仅提供后台服务的多租户管理平台。平台基于Spring boot+JPA实现,页面采用freemarker后端渲染技术。 本框架的目的用于快速开发轻量级后台服务,比如库存管理、政务OA管理、直播回传管理、订单系统等等,并需要开发与之对应的APP、微信等前端产品。

核心框架包含四个模块: 1、yoga-common:通用类库,包含Controller、Service等所有的基类,提供基础错误处理(全部基于异常机制),并提供包含基于Redis的分布式锁、ssl支撑、rabbitmq基础封装等通用元素,对字符串、日期时间、Json等通用类型提供常用封装; 2、yoga-resource:页面资源类库,提供包含bootrstrap、jquery、zui等在类的页面资源库以及相关插件,resource在实际使用中,可以不用打包到jar中,而采用动静态分离的方式,将本模块下resource目录中的相关文件使用nginx托管,避免静态资源访问对应用服务器构成压力; 3、yoga-user:租户与用户管理模块,包含对多租户模板、多租户、部门、职称以及用户权限体系的管理、基于shiro权限框架,通过域名前缀或者参数方式实现多租户数据隔离;包含配置项自动发现以及配置管理;包含权限菜单(menu.xml)自动发现以及权限管理体系;短信插件发现及短信发送功能;包含接口自动发现以及API调试框架; 4、yoga-utility:辅助功能类库,主要用于提供一些常用的网络功能(比如阿里云身份证识别服务)以及日志功能;

提供如下应用模块及例子: 1、yoga-pay:支付模块,提供对微信支付和支付宝支付的封装以及回调处理,并对流水信息进行存储,以备对账使用; 2、yoga-content:内容管理模块(注意,该模块并不支持最终的网站呈现,只为网站、微信和APP提供内容数据支撑),包含栏目管理、文章模板管理、文章布局管理(对于微信,可以直接设置文章的显示方式,以供微信菜单项直接调用跳转)、文章管理、置顶管理;栏目管理等使用mysql数据库,文章存储使用mongodb; 3、yoga-ueditor:百度Ueditor模块,供yoga-content中网页在线编辑功能使用; 4、yoga-plugin-eucpsms:亿美短信平台短信发送插件,该平台对短信内容不做任何限制,发送频次不做任何限制; 5、yoga-plugin-yunpian:云片短信平台插件 6、yoga-ewedding:一个针对婚礼人与婚礼新人的在线沟通APP后台系统(APP git单独提供),这是一个未上线项目,可自由使用;基于融云IM平台实现在线实时聊天;基于后台平台实现婚礼圈(类似于朋友圈)功能; 7、yoga-imessager:融云封装模块 8、yoga-wechat:微信后台管理模块,基于kotlin语言开发(其他模块均为java语言),实现对微信多帐号管理、菜单管理、用户管理、自定义回复管理以及插件系统、微信图文、视音频发布等基础功能。

框架说明: 1、多租户:本框架为做租户而设计,通过在数据库中对应表增加tenant_id字段,实现快速多租户隔离,而多余订单表、商品表等数据量太大的表,可以通过按租户分表的方式进行隔离,分表操作,可以通过注册TenantChangedObserver.onCreated等实现对租户创建删除的感知,从而完成租户表的创建删除管理;(暂未支持分库) 2、多租户自定义:每个租户可以独立配置管理页面入口样式、该租户开通的模块以及业务功能、也可以定制租户的管理页面左侧菜单树(快捷入口)以及租户配置项等等; 3、多租户模板:本框架支持为统一类型的租户创建模板(比如,都是商户),创建租户模板后,新创建租户可以通过租户模板快速继承样式、模块、菜单、配置等特性; 4、配置管理:本框架在启动时自动查找具有@Settable注解的类或者函数,实现对配置的统一发现和管理,@Settable支持快速类型配置(比如int、boolean、enum选项)以及自定义页面两种模式,并且支持租户配置(只有平台管理员可见)和用户配置(租户管理员可见)两种模式;发现的配置统一在菜单的配置管理/系统配置中呈现;每个租户只能看到开通了模块的配置项目; 5、模块与菜单管理:在启动时,框架会扫描所有模块resources下的menu.xml文件,该文件存储该模块提供的菜单项目以及各个菜单项目所需要的权限,平台管理员可以在租户管理中,为每个租户开启对应的菜单项目(模块); 6、api调试:框架内置api调试功能,会自动扫描派生自BaseApiController的所有子类型,并从中查找具有RequestMapping注解的函数,作为API入口,如果不想暴露该函数,可以通过添加注解@Expain(exclude = true)隐藏;

模块加入方法: 1、本框架主旨为了快速应用开发,因此,如果需要增加新的模块,可以参考yoga-content等新建spring boot模块,并且依赖于yoga-common、yoga-resource、yoga-user,然后在resources下创建menu.xml文件,编写该模块将实现的菜单项目以及功能入口; 2、如果需要配置项目,只需要在Controller类上增加@Settable注解,并参考上述模块实现快速配置或者自定义配置; 3、重新启动应用,即可看到所创建的菜单项目和配置项目,然后逐步实现各个菜单功能即可。

运行说明: 1、数据库:将sql/yoga.sql导入到mysql数据库,为了兼容微信昵称等数据,字符集建议选择utf8_mb4; 2、缓存:本框架使用redis作为缓存系统和分布式锁,请配置redis服务器,并修改application.properties; 3、mongodb:cms的文章存储于mongodb中,如需要使用yoga-content,请部署mongodb,并配置; 4、调试与运行:本框架使用gradle完成项目自动化,开发IDE推荐使用IDEA,请使用idea打开yoga-conent、yoga-wechat、yogao-ewedding中所需要的任意一个目录,并且选择gradle版本为gradle-2.14.1-rc-2(特别注意,因为开发环境原因,spring boot使用了1.3.3版本,对应的gradle版本请使用2.14;最新的gralde 2.x不支持太低版本的spring boot,需要对应修改gralde.build文件),导入idea后,即可进行开发运行; 5、打包部署:进入到top-level工程目录下,运行gralde build,将在build/libs下生成jar文件,直接通过java -jar xxx.jar运行即可,也可以打包为war,通过tomcat等容器部署运行;

安全说明: 1、ssl支持:框架已经支持https,若在无nginx环境下运行,可直接修改application.properties中的https.server.keystore配置项,配置对应域名的证书文件;建议使用nginx完成https配置; 2、api加密:由于各个项目的api加密方式易变,本框架未直接集成api加密,在实际项目中,可通过拦截器,对/api开头的mapping进行签名校验,比如盐值等快速运算方案;

性能说明: 1、首先本框架本身并非定位于高性能; 2、框架内部需要经常处理的部分(比如域名前缀到租户映射、权限框架、CMS栏目等)均已经在service层面添加redis缓存支持; 3、对于更高的性能,引用曾经在脉脉中说的一段话:动态对象静态化,利用前端缓存技术、cdn技术、接口缓存技术等提升前半截并发能力;高并发与低并发分模块分系统部署,采用不同的业务流程和系统架构,使用消息队列排缓解模块瓶颈,必要时采用低层语言开发爆发性访问模块,提升业务系统的峰值和扩展能力;数据库读写分离,数据库群集和缓存技术,提升持力层性能。 4、高性能是在特定环境下逐步发展起来的框架解决方案,并非某一种编码方式就能解决,比如抢红包,如果想单纯的通过提升应用服务器性能或者数据库性能实现每秒百万级的响应,形如天方夜谭,必然是在前端页面拦截一部分,反向代理拦截一部分,缓存处理一部分,只有很少一部分进行应用服务器,还得进行分布式运算(奖品数量锁定,红包时间锁定等等),才能实现较高的并发能力;而在IOT领域,通过MQTT等实现伪实时消息通讯是业界共识;这与流媒体服务器从曾经的rtsp、flv、mms等实时协议全面转换为HLS、HDS、MPEG-DASH等伪实时流媒体逻辑完全一致。

如有疑问,欢迎联系: Email: [email protected] QQ: 9794011

yoga's People

Contributors

yunsean avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.