This's Uim

一个开源的适合web开发的基础架构,指在帮助开发人员和技术团队促进其软件应用。

什么是Uim?

Uim是一个面向未来的web软件架构。包含统一接口网关和分布式队列消费机制,通过将前端请求和后端接口标准化, 达到提高开发效率、控制项目质量和自动化运维的效果,通过简单的横向扩容或收缩来使应用或系统应对不同业务时期的并发量, 实现尽可能高的运行效率和尽可能低的资源成本。

我们建议的使用场景有:物联网、大中型互联网应用等有持续大并发请求,或需要追求高性能、高可扩展、高可用等要求的软件项目; 也可为技术团队提供统一的开发规范,保持未来对程序改进的适应;

我们也在努力降低Uim的使用门槛,使小型或尝试型的软件应用也能够快速使用Uim的全部特性。

专为技术团队设计

为团队提供统一的开发规范,简单有效的开发原则,易于快速迭代。全面提升开发效率和软件质量,可视化的运维部署管理。

节省时间

Uim可提升团队间的沟通效率,加快程序的开发速度。 提供统一的开发规范,降低前后端岗位之间的协作成本,并从源头上减少程序出错的机会。

关注业务

在Uim之前,也曾思考和设计过几个面向业务的代码生成器并实践使用。 但真正的互联网应用场景复杂多变,Uim让你的团队专注于业务需求,快速实现功能开发。

不限设备

无论你的客户习惯使用PC、笔记本或是手持设备,你的开发团队都无须太过关注于此,uim.js支持几乎所有的现代浏览器内核。

简洁高效

接口层除提供统一网关外,还封装了前端的调用和后端的对接标准。 无论你的团队采用Uim内置或对接自有接口框架,Uim的原则是保持简洁,快速响应。

轻松维护

无论你的业务量如何猛增,只要运行成本在你的财务预算之内,端起桌上的瓷杯,轻闻茶香吧。 预算有限也不用担心,放下茶杯。减少节点数或是限流,简单可控。

特性

快速开始

前端引入

作为前端,无论你的应用是基于PC或是移动设备,都可以方便的使用uim.js提供的工具函数。 即使你暂时只想轻度的使用Uim,它仍然在努力的形成一种通用性,便于你与别人分享和交流您的程序。

如果你的团队决定完整的使用Uim,可使用以下代码块,对Uim进行初始化。

  • 轻度使用: 仅引入uim.js,使用其提供的函数库和部分特性。有哪些函数和特性?
  • 完整使用: 配置服务器地址,并在uim.init时传入应用编号和服务地址。有哪些优势?
  • 在线服务: 无须部署自有服务器,直接使用Uim提供的在线服务。如何使用?

<!-- 先引入uim.js -->
<script src="./uim.js"></script>
<script>
    uim.init({
        deploy_app_id: '', // 部署应用编号:必须,字符串类型(用于校验)
        server_host: '', // 服务器地址:为空则不连接服务器(自行校验应用和会话)
        
        done: function () { // 成功回调
            console.log('uim初始成功');
            // appStart(); // 执行您的引导函数
        },
        
    });
</script>
                     

环境部署

Uim开源项目包含若干个子工程,如果你想要从源码开始,详细了解手工部署各个工程,请参考Uim各工程源码部署

如果你想要快速入手,可以从安装界面化的Uim部署管理控制台作为开始,以下是为您准备的sh脚本,请阅读注释并根据情况操作(不考虑网络因素,手动仔细操作约需5-10分钟)。

    
# 服务器操作系统建议使用centos7,以下程式中将会使用到docker、mariadb与redis。
# 简单安装mariadb请参考 https://open-src.uim.site/help/
# 简单安装redis请参考 https://open-src.uim.site/help/

############ 一、准备系统环境
# 创建程序目录,可根据需要自定义路径
mkdir -pv /home/data/
# 准备nodejs安装包
cd /home/data && wget https://nodejs.org/dist/v12.18.1/node-v12.18.1-linux-x64.tar.xz
# 下载并解压uim源码
wget https://open-src.uim.site/down/uim-v0.8.13-open-src.tar.xz
tar xf uim-v0.8.13-open-src.tar.xz
# 使用docker运行uim
yum install docker y
systemctl start docker
systemctl enable docker
# 使用docker官方精简centos镜像创建容器,映射目录和端口
docker run --name uim-v0.8.13 -tid -v /home/data:/home/data -p 5200-5210:5200-5210 centos /usr/sbin/init

############ 二、准备软件环境
# 进入该容器,并安装nodejs环境
docker exec -ti uim-v0.8.13 bash
cp /home/data/node-v12.18.1-linux-x64.tar.xz /home/
cd /home
tar xf node-v12.18.1-linux-x64.tar.xz
cd node-v12.18.1-linux-x64/bin/
ln -s /home/node-v12.18.1-linux-x64/bin/* /usr/bin/ # 里面有node、npm、和npx
# 安装forever
npm install forever -g
ln -s /home/node-v12.18.1-linux-x64/bin/forever /usr/bin/

############ 三、安装uim部署管理控制台
# 进入源码中[uim部署管理控制台]工程目录
cd /home/data/uim-v0.8.13-open-src/console/
# 创建数据库,并导入uim.install.sql,如未准备数据库环境,请参照本脚本顶部提示。
# 继续进入nodejs服务端目录
cd ./nodejs/
# 安装依赖并修改配置文件
npm install mysql redis socket.io
vi ./env.config.js # 根据需要修改mysql、redis、及websocket监听端口等信息
# 配置修改完毕后,尝试启动uim部署管理控制台
node console-main.js # 查看打印信息,使用浏览器进行访问测试
# 如果一切正常,改用forever守护运行
forever start -w -l /home/data/uim-v0.8.13-open-src/console/log-console console-main.js

    

接口开发

基于对接口层轻量化的要求,每个接口尽可能只负责一个简单独立的逻辑。 如果你的团队计划使用自己的的接口框架,无论是基于何种语言,只需要在您的框架入口进行简单的包装, 按照Uim的接口标准接受请求参数并返回结果即可。 如要实现自动化部署,也只须为您的框架基础环境编写一个安装脚本,以简化运维人员在部署管理控制台中的操作。
以Uim内置提供的,基于Thinkphp5.0.24的接口框架为例,一个文件只存放一个接口类,类中的函数名以接口版本号命名, 接口函数要么返回错误信息,要么返回数据对象。


    <?php
    namespace app\_test;
    use think\Controller;
    
    class _yourApi extends Controller
    {
        public function v_1_0($args)
        {
            $response = []; // 定义返回数组
    
            // 一、判断传入参数
            // ------------------------------------------------------------------------------
            if (!isset($args['consumer_id']) || !$args['consumer_id']) {
                return uim_error(11, 'input args error', '非法测试来源');
            }
    
            // 二、逻辑处理
            // ------------------------------------------------------------------------------
            # ... 此处可以放置您的业务代码
    
            // 三、执行与返回
            // ------------------------------------------------------------------------------
            $response['time'] = DATE_TIME;
            return $response;
        }
    }
                    

完整文档

我们将对源码中所有工程的部署文档和开发说明进行详细整理,如果你发现有任何疑问或遇到障碍, 请在文档下提意见或建议,或直接在社区反馈。

查看完整文档

许可

uim开源版所有程序代码完全免费。目前仅要求开发人员、系统使用人或实际部署控制人成为uim社区会员并遵守社区规则。

如果您获得了uim开源版的所有或部分程式,请保证在不违反中华人 民共和国法律以及您所在地法律的约束下使用。请不要为极端组织、 反动组织、恐怖主义、或带有侵略意图的政治和宗教团体服务。

联系

我希望Uim能够给您的开发工作带来帮助。 如有任何疑问或建议,请随时与我联系。
QQ/email:644572669#qq.com(请把#换成@)

想要随时收到我们的最新消息?

成为Uim社区的一员 Uim社区

在Uim社区处于建设或维护状态时,您可以先加入QQ群:801261291

minner
Uim开源项目发起人