828华为云征文|部署多功能集成的协作知识库 AFFiNE

828华为云征文|部署多功能集成的协作知识库 AFFiNE

  • 一、Flexus云服务器X实例介绍
  • 二、Flexus云服务器X实例配置
    • 2.1 重置密码
    • 2.2 服务器连接
    • 2.3 安全组配置
    • 2.4 Docker 环境搭建
  • 三、Flexus云服务器X实例部署 AFFiNE
    • 3.1 AFFiNE 介绍
    • 3.2 AFFiNE 部署
    • 3.3 AFFiNE 使用
  • 四、总结

一、Flexus云服务器X实例介绍

云服务器是一种高效便捷的计算资源服务。它可随时根据需求进行弹性扩展,具有高可靠性和稳定性。无需担心硬件维护,轻松应对高并发访问。无论是企业建站、开发应用还是数据存储,云服务器都能提供强大支持,助力你的业务在云端飞速发展。

华为云下一代云服务器Flexus X实例焕新上线,新产品提供与华为云旗舰级云服务器产品相同的单AZ 99.975%可用性,跨AZ 99.995%可用性,阶梯式定价、动态画像并搭配AS,实现资源弹性伸缩对应业务弹性变化,同时降低TCO,覆盖行业大多数通用工作负载场景。

在这里插入图片描述

Flexus X实例通过和其他服务组合,具备计算、镜像安装、网络、存储、安全等能力,您可根据业务需要灵活配置各资源。

在这里插入图片描述
本次测评使用的规格是:4核12G-100G-3M规格的Flexus X实例基础模式

在这里插入图片描述

二、Flexus云服务器X实例配置

2.1 重置密码

购买服务器的时候可以提前设置用户名和密码,因为我这里跳过了,所以购买完成后需要重置密码,会短信或站内消息通过你的云服务器信息,重点是公网IP地址和用户名,首先打开你的服务器控制台,选择重置密码

在这里插入图片描述

勾选自动重启,点击确定即可

在这里插入图片描述

2.2 服务器连接

华为云服务器提供了多种链接方式,如使用控制台提供的VNC方式登录、使用Linux/Mac OS系统主机登录Linux弹性云服务器(即ssh root@192.168.48.78命令)或者使用Putty、Xshell等工具登录Linux弹性云服务器。

我个人习惯使用 MobaXterm 这款软件,添加SSH连接,输出公网IP、用户名和端口(默认22),连接即可。

在这里插入图片描述

2.3 安全组配置

安全组是一个逻辑上的分组,为同一个VPC内的云服务器提供访问策略。用户可以在安全组中定义各种访问规则,当云服务器加入该安全组后,即受到这些访问规则的保护。

系统为每个网卡默认创建一个默认安全组,默认安全组的规则是对出方向上的数据报文全部放行,入方向访问受限。您可以使用默认安全组,也可以根据需要创建自定义的安全组

在这里插入图片描述

主要需要填写优先级(默认填1即可)、协议端口(协议一般为TCPUDP,端口一般选择你项目需要暴露的端口即可),描述(选填,一般会填写此端口的用途以免忘记了),其他默认点击确定即可。安全组配置主要是暴露端口可以给外网访问。

在这里插入图片描述

如果还不清楚可以参考文档:安全组配置示例

2.4 Docker 环境搭建

本次服务器环境是ubuntu系统镜像,需要自己安装docker环境

服务器类别系统镜像内网IP地址Docker版本操作系统版本
Flexus云服务器X实例Ubuntu192.168.0.16827.2.0Ubuntu 22.04.4 LTS

使用apt-get命令安装docker及其配置

# 安装必要工具包
$ sudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common# 添加Docker GPG秘钥
$ sudo curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -# 配置仓库源
$ sudo add-apt-repository \"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \$(lsb_release -cs) \stable"	# 更新apt包索引
$ sudo apt-get update# 安装docker
$ sudo apt-get install docker-ce docker-ce-cli containerd.io# 添加docker镜像源
$ sudo vim /etc/docker/daemon.json{"registry-mirrors": ["https://ustc-edu-cn.mirror.aliyuncs.com/","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn","https://ccr.ccs.tencentyun.com/","https://docker.m.daocloud.io/","https://dockerproxy.com",]
}
# 重启
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

测试docker安装是否成功

root@flexusx-c6b3:~# docker -v
Docker version 27.2.0, build 3ab4256```

检查docker服务状态

root@flexusx-c6b3:~# systemctl status docker
* docker.service - Docker Application Container EngineLoaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)Active: active (running) since Fri 2024-08-30 15:53:45 CST; 17h ago
TriggeredBy: * docker.socketDocs: https://docs.docker.comMain PID: 24912 (dockerd)Tasks: 13Memory: 24.7MCPU: 3.778sCGroup: /system.slice/docker.service`-24912 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

检查docker compose版本

root@flexusx-c6b3:~# docker compose version
Docker Compose version v2.29.2

三、Flexus云服务器X实例部署 AFFiNE

3.1 AFFiNE 介绍

AFFiNE 是一个开源的一体化工作区和操作系统,适用于构建知识库的所有构建块以及更多内容 — wiki、知识管理、演示和数字资产。它是 Notion 和 Miro 的更好替代品。

AFFiNE 是一款基于 CRDT 的本地优先应用程序,支持实时协作。您的数据始终存储在本地,同时多个节点保持实时同步。

  • 集成化文档与白板:通过将文档和白板集成为一个功能模块,AFFiNE使团队能够实现从思维导图到正式文档的无缝过渡,确保了创意的完整和共享。

  • 强大的看板功能:AFFiNE提供了先进的看板项目管理工具,支持用户轻松管理各种任务,尤其适合团队协作和个人规划。通过可视化的方式,用户可以直接跟踪项目进展,提高时间和任务管理的效率。

  • 灵活的操作界面:其简洁直观的设计界面赢得了用户的一致赞赏,用户可以通过个人化的设置,自由调整工作视图,从而更好地支持不同的工作风格。

  • 本地优先的隐私保护:用户数据的管理完全掌握在用户的手中。AFFiNE旨在提供一个安全可靠的环境,用户的数据不会无意间被分享或者滥用。

  • 开源社区:用户不仅是产品的消费者,更是其设计的参与者。通过开源,AFFiNE开放了更多可能性,让用户根据自己所需定制和创新出不一样的功能。

在这里插入图片描述
AFFiNE 以及我们的云服务和所有基础设施都是 100% 开源的,可以自由地管理、自行托管甚至塑造您自己的 AFFiNE 版本。借助官方即将推出的插件社区和第三方模块,正在构建一个适合任何人的独特需求的平台,想象一个像您自己的数字生活方式一样可定制的工作空间,其中每个工具和功能都是专门为您独特的工作流程量身定制的。

  • 官网:https://affine.pro/
  • Github:https://github.com/toeverything/AFFiNE

3.2 AFFiNE 部署

  • 创建 docker-compose.yml
version: "3.5"
services:affine:image: ghcr.io/toeverything/affine-graphql:stablecontainer_name: affine_selfhostedcommand:['sh', '-c', 'node ./scripts/self-host-predeploy && node ./dist/index.js']ports:- '3010:3010'- '5555:5555'depends_on:- redis- postgresvolumes:# custom configurations- ./self-host/config:/root/.affine/config# blob storage- ./self-host/storage:/root/.affine/storagelogging:driver: 'json-file'options:max-size: '1000m'restart: unless-stoppedenvironment:- NODE_OPTIONS="--import=./scripts/register.js"- AFFINE_CONFIG_PATH=/root/.affine/config- REDIS_SERVER_HOST=redis- DATABASE_URL=postgres://affine:affine@postgres:5432/affine- NODE_ENV=production- AFFINE_ADMIN_EMAIL="maxx@maxxspace.com"- AFFINE_ADMIN_PASSWORD=1q2w3e4r# Telemetry allows us to collect data on how you use the affine. This data will helps us improve the app and provide better features.# Uncomment next line if you wish to quit telemetry.# - TELEMETRY_ENABLE=falseredis:image: rediscontainer_name: affine_redisrestart: unless-stoppedvolumes:- ./self-host/redis:/datahealthcheck:test: ['CMD', 'redis-cli', '--raw', 'incr', 'ping']interval: 10stimeout: 5sretries: 5postgres:image: postgrescontainer_name: affine_postgresrestart: unless-stoppedvolumes:- ./self-host/postgres:/var/lib/postgresql/datahealthcheck:test: ['CMD-SHELL', 'pg_isready -U affine']interval: 10stimeout: 5sretries: 5environment:POSTGRES_USER: affinePOSTGRES_PASSWORD: affinePOSTGRES_DB: affinePGDATA: /var/lib/postgresql/data/pgdata
  • ports: 映射主机的 3010 端口到容器的 3010 端口
  • volumes: 将主机目录挂载到容器。
  • 包含三个容器服务:affine、postgres 和 redis

如果将上述代码片段保存在名为 docker-compose.yml 的文件中,则只需从同一文件夹中运行 docker compose up -d 即可自动拉取 AFFiNE 镜像,并创建并启动一个容器。 up 表示启动服务,-d 表示在后台执行。docker-compose down 命令用于停止和清理由 docker-compose up 启动的服务。

  • 启动服务

进入项目目录,执行docker-compose up -d启动命令,会自动拉取容器并运行

从 Github Packages 拉取 AFFiNE 镜像,地址:https://ghcr.io/toeverything/affine-graphql

root@flexusx-c6b3:~/affine# docker-compose up -d
Pulling redis (redis:latest)...
latest: Pulling from library/redis
302e3ee49805: Pull complete
5d0249d9189d: Pull complete
4825c5e95815: Pull complete
b0ce50685fa2: Pull complete
455886c7d31b: Pull complete
96377887d476: Pull complete
4f4fb700ef54: Pull complete
5fac73c23c9b: Pull complete
Digest: sha256:82d08ad50c181182ee5ce23dcefd754a12f946534af57959ba08490e1d0696a0
Status: Downloaded newer image for redis:latest
Pulling postgres (postgres:latest)...
latest: Pulling from library/postgres
302e3ee49805: Already exists
db123f79d191: Pull complete
0f8c00fde6b5: Pull complete
faa7319453cb: Pull complete
db22d52fa3c2: Pull complete
a75b6bd68f08: Pull complete
3bbfa3446e21: Pull complete
0b62c3405bb7: Pull complete
2b20a8c7ce41: Pull complete
e7c88e163985: Pull complete
e5a700d882eb: Pull complete
28b27d53d86b: Pull complete
bfc263366b3f: Pull complete
e5ff51eeda62: Pull complete
Digest: sha256:6a1018836fcf5be0ecf77b265b4434c58816205061817cba70168907fb328d41
Status: Downloaded newer image for postgres:latest
Pulling affine (ghcr.io/toeverything/affine-graphql:stable)...
stable: Pulling from toeverything/affine-graphql
a2318d6c47ec: Already exists
00e35d36405a: Already exists
225fba03fa1f: Already exists
447f637b003c: Already exists
dd1be0639854: Already exists
4650130184b5: Pull complete
10a0952dbfc4: Pull complete
b4f530463457: Pull complete
d6f29f3b6b33: Pull complete
4f4fb700ef54: Pull complete
b9c166759c7d: Pull complete
Digest: sha256:b0dbbfe989185019e2dc30c5b1c89192ec5ab6eb71eee8643398f5589c811907
Status: Downloaded newer image for ghcr.io/toeverything/affine-graphql:stable
Creating affine_redis ... 
Creating affine_postgres ... 
Creating affine_redis
Creating affine_redis ... done
Creating affine_selfhosted ... 
Creating affine_selfhosted ... done
  • 配置安全组

在Flexus云服务器X实例的安全组管理页面,添加入方向规则,接下来我们启动服务需要监听3010端口,所以添加安全组为TCP:3010协议端口。

在这里插入图片描述

  • 检查容器状态

检查 AFFiNE 容器状态,确保容器正常启动

root@flexusx-c6b3:~/affine# docker ps
CONTAINER ID   IMAGE                                        COMMAND                  CREATED         STATUS                   PORTS                                                                                  NAMES
ca413173e7ec   ghcr.io/toeverything/affine-graphql:stable   "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes             0.0.0.0:3010->3010/tcp, :::3010->3010/tcp, 0.0.0.0:5555->5555/tcp, :::5555->5555/tcp   affine_selfhosted
96e154565e16   postgres                                     "docker-entrypoint.s…"   3 minutes ago   Up 2 minutes (healthy)   5432/tcp                                                                               affine_postgres
bed4a95d26c1   redis                                        "docker-entrypoint.s…"   3 minutes ago   Up 2 minutes (healthy)   6379/tcp                                                                               affine_redis
  • 访问地址

内网:http://localhost:3010
外网:http://公网IP:3010

  • 访问结果

在这里插入图片描述

若出现此页面,则部署 affine server 成功。

3.3 AFFiNE 使用

通过一些简单的设置来配置您的自托管 AFFiNE,创建管理员账户,也可用于普通用户使用,输入用户名、邮箱和密码,继续

在这里插入图片描述

登录成管理系统,可以查看和添加用户、服务器设置、允许新注册等相关权限设置,后续访问管理员地址:http://localhost:3010/admin

在这里插入图片描述

切换到默认地址访问即可进入 AFFiNE 首页,可以启用 AFFiNE Cloud 同步服务

在这里插入图片描述

每个用户有10GB的免费空间容量,若不想使用云同步,可以不开启,直接使用本地

在这里插入图片描述

设置页功能:可以修改外观中的配色方案和显示语言,编辑器设置(启用 AFFiNE AI、字体样式、页面、背景、图形、画笔、连线等),键盘快捷键,实验性功能

在这里插入图片描述

还有工作区设置:工作区LOGO、工作区名称、邀请成员、删除工作区等

在这里插入图片描述

查看所有文档界面,文档精选标签三个Tab选项,所有文档列表可以进行条件筛选:创建时间、更新时间、已收藏、标签、已分享,并且支持多条件筛选,文档列表显示属性可调节:内容预览、标签、创建时间、更新时间,还可以条件进行文档分组显示:创建时间、更新时间、标签、收藏、不分组,文档列表也可以进行排序、批处理操作等

在这里插入图片描述

选中文档,可以进行加入收藏、查看信息、在新标签页打开、复制、移动到回收站等操作

在这里插入图片描述

新建文档,可以创建新的页面、新的无界界面、导入支持 Markdown 和 Notion

在这里插入图片描述

查看 Jourunals 模块:上面展示日期,可以添加标签和i其他自定义属性,还有反向链接和外链统计,右上角菜单可以转化为无界、查看信息、查看目录、查看历史版本、导入、导出等

在这里插入图片描述
编辑部分和Notion操作类似,支持Markdown语法,使用快捷键/可以调出命令,空格键调用AI

在这里插入图片描述

导出功能支持导出HTML、PNG、Markdown格式和打印

在这里插入图片描述

组织可以新建文件夹,再添加文档,就类似的 Notion 笔记了

在这里插入图片描述

尝试下无界界面

在这里插入图片描述

支持幻灯片放映、分享和导出

在这里插入图片描述

还一些其他选项功能:回收站、导入、了解更多使用技巧

在这里插入图片描述

点击收藏,并查看收藏夹内容

在这里插入图片描述
在快节奏的现代生活中,信息不再是稀缺资源,而是过剩的挑战,如何有效地组织这些信息变得至关重要。使用AFFiNE,从登录界面进入,用户可以创建和管理自己的工作空间,文档的创建非常简单,只需点击并编辑,同时用户可以随时将内容从文本切换到手写模式,为工作增添一份个性化的细节。白板功能使得用户能够在进行团队合作或个人头脑风暴时,随时展示和记录想法,这种实时协作的特性,能够促进沟通并推动项目向前发展,还有更多有趣的设置和功能就需要自行探索了。

四、总结

AFFiNE的独特之处在于整合了文档处理、白板创作和数据库管理等多种功能,让用户在一个平台上完成多种任务,其无缝的工作流程和注重隐私的设计,使其不仅适合个人用户,更为企业提供了一个理想的协作渠道。此次使用的Flexus X实例配置还是很高的4核12G-100G-3M规格基础模式,项目整体占用不高,有点性能过剩,操作丝滑流畅,写笔记过程使用各种文字类型或者媒体类型的都不会延迟,自部署的使用体验要好过Notion,网络加载更快,画图体验也不错。

华为云服务器,卓越性能之选!强大的计算能力、稳定可靠的运行环境,为你的业务提供坚实保障。现在正值828 B2B企业节,价格更优惠,服务不打折。无论是企业级应用还是个人项目,华为云服务器都能满足你的需求。快来体验!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/55364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Win10之解决:设置静态IP后,为什么自动获取动态IP问题(七十八)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…

域内密码喷洒 Password Spray 实验

password spray 1. 实验网络拓扑 kali: 192.168.72.128win2008: 192.168.135.129 192.168.72.139win7: 192.168.72.149win2012:(DC) 192.168.72.131 2. 简单原理 Kerberos针对同一个用户,多次的密码尝试请求有锁定保护策略。 但是我们可以切换用户,…

MySQL高阶2082-富有客户的数量

目录 题目 准备数据 分析数据 题目 编写解决方案找出 至少有一个 订单的金额 严格大于 500 的客户的数量。 准备数据 Create table If Not Exists Store (bill_id int, customer_id int, amount int)Truncate table Storeinsert into Store (bill_id, customer_id, amoun…

深入浅出Java多线程(六):Java内存模型

引言 大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第六篇内容:Java内存模型。大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!! 在并发编程中&#xf…

Python+Matplotlib可视化初等函数示例

import numpy as np import matplotlib.pyplot as pltplt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] Falsefig, axs plt.subplots(2, 3, figsize(15, 10))# 1. 幂函数 x np.linspace(-2, 2, 200) axs[0, 0].plot(x, x**2, labely x^2) axs[0,…

leetcode135:分发糖果

步骤1:计算问题性质的定义 我们需要解决的题目是一个典型的贪心算法问题,要求分发糖果的数量,满足特定条件。以下是问题的详细定义: 输入: ratings:长度为 n 的数组,表示每个孩子的评分&#x…

畅阅读小程序|畅阅读系统|基于java的畅阅读系统小程序设计与实现(源码+数据库+文档)

畅阅读系统小程序 目录 基于java的畅阅读系统小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师…

51单片机的宠物自动投喂系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温湿度传感器DS1302时钟模块蓝牙步进电机按键、蜂鸣器等模块构成。适用于猫猫/狗狗宠物自动喂食器等相似项目。 可实现基本功能: 1、LCD1602实时显示北京时间和温湿度 2、温湿度传感器DHT11采集环境温湿度 3、时…

数据在内存中的存储【上】

一.整型在内存中的存储 在讲解操作符的时候,我们就讲过了下面的内容: 整数的2进制表示方法有三种,即 原码、反码和补码 有符号的整数,三种表示方法均有符号位和数值位两部分,符号位都是用0表示"正"&#xff…

数据结构——计数、桶、基数排序

目录 引言 计数排序 1.算法思想 2.算法步骤 3.代码实现 4.复杂度分析 桶排序 1.算法思想 2.算法步骤 3.代码实现 4.复杂度分析 基数排序 1.算法思想 2.算法步骤 3.代码实现 4.复杂度分析 排序算法的稳定性 1.稳定性的概念 2.各个排序算法的稳定性 结束语 引…

在WPF中实现多语言切换的四种方式

在WPF中有多种方式可以实现多语言,这里提供几种常用的方式。 一、使用XML实现多语言切换 使用XML实现多语言的思路就是使用XML作为绑定的数据源。主要用到XmlDataProvider类. 使用XmlDataProvider.Source属性指定XML文件的路径或通过XmlDataProvider.Document指定…

IDEA 系列产品 下载

准备工作 下载 下载链接:https://www.123865.com/ps/EF7OTd-yVHnH 仅供参考 环境 演示环境: 操作系统:windows10 产品:IntelliJ IDEA 版本:2024.1.2 注意:如果需要其他产品或者版本可以自行下载&#xff0…

深入理解Dubbo源码核心原理-Part3

到此开始讲解Dubbo消费端的源码 在消费一端,需要关注两件事情。第一,接口的proxy如何生成。第二,请求如何发送。 首先看到启动类 接下来看真正inject方法 现在需要思考,待注入的Bean从哪儿来,这个Bean必然注入的是一…

(16)MATLAB仿真Nakagami-m分布1

文章目录 前言一、Nakagami分布二、MATLAB建模代码三、仿真结果画图四、总结 前言 Nakagami衰落模型最初是由于该模型与短波电离层传播的经验结果相匹配而提出的。它还用于仿真来自多个干扰源的情况,因为多个独立且同分布(i.i.d)的瑞利分布随…

Flask-3

文章目录 ORMFlask-SQLAlchemySQLAlchemy中的session对象数据库连接设置常用的SQLAlchemy字段类型常用的SQLAlchemy列约束选项 数据库基本操作模型类定义 数据表操作创建和删除表 数据操作基本查询SQLAlchemy常用的查询过滤器SQLAlchemy常用的查询结果方法多条件查询分页器聚合…

Ajax ( 是什么、URL、axios、HTTP、快速收集表单 )Day01

AJAX 一、Ajax是什么1.1名词解释1.1.1 服务器1.1.2 同步与异步1. 同步(Synchronous)2. 异步(Asynchronous)3. 异步 vs 同步 场景4. 异步在 Web 开发中的常见应用: 1.2 URL 统一资源定位符1.2.1 URL - 查询参数1.2.2 ax…

JavaSE——面向对象8:Object类详解(==与equals的区别、hashCode、toString方法)

目录 一、与equals()的区别 (一)是一个比较运算符 (二)equals是Object类中的方法,只能判断引用类型 (三)equals方法重写练习 1.练习1 2.练习2 3.练习3 二、hashCode方法 三、toString方法 1.默认返回:全类名(包名类名)哈希值的十六进制 (1)不…

unreal engine5制作动作类游戏时,我们使用刀剑等武器攻击怪物或敌方单位时,发现攻击特效、伤害等没有触发

UE5系列文章目录 文章目录 UE5系列文章目录前言一、问题分析二、解决方法1. 添加项目设置碰撞检测通道2.玩家角色碰撞设置3.怪物角色碰撞预设 最终效果 前言 在使用unreal engine5制作动作类游戏时,我们使用刀剑等武器攻击怪物或敌方单位时,发现攻击特效…

基于Hive和Hadoop的用电量分析系统

本项目是一个基于大数据技术的用电量分析系统,旨在为用户提供全面的电力消耗信息和深入的用电量分析。系统采用 Hadoop 平台进行大规模数据存储和处理,利用 MapReduce 进行数据分析和处理,通过 Sqoop 实现数据的导入导出,以 Spark…

Python中流行的开源OCR项目

以下是一些Python中流行的开源OCR项目: PaddleOCR:由百度开发的OCR工具库,支持多种语言的文字识别,包括中英文,同时支持倾斜、竖排等多种方向的文字识别。它提供了超轻量级的PP-OCRv3模型,适合在资源受限的…