一个可扩展的、多租户的云后端
Para 是一个可扩展的、多租户的后端服务器/框架,用于对象持久化和检索。它通过处理后端操作,帮助您更快地构建和原型化应用程序。它可以作为您基于 JVM 的应用程序的一部分,也可以作为独立的、多租户的 API 服务器部署,多个应用程序和客户端可以连接到它。
"pára"在保加利亚语中意为"蒸汽"。就像蒸汽用来驱动事物一样,您可以使用 Para 来驱动您的移动或 Web 应用程序后端。
看看 Para 如何与其他开源后端框架相比较。
这个项目由 Erudika 全额资助和支持 - 一家独立的、自力更生的公司。
特性
- 使用亚马逊 Signature V4 算法保护的 RESTful JSON API
- 与数据库无关,为可扩展的数据存储设计(DynamoDB、Cassandra、MongoDB 等)
- 全文搜索(Lucene、Elasticsearch)
- 分布式和本地对象缓存(Hazelcast、Caffeine)
- 多租户 - 每个应用都有自己的表、索引和缓存
- 带签名负载的 Webhooks
- 基于 Spring Security 的灵活安全性(LDAP、SAML、社交登录、CSRF 保护等)
- 使用 JSON Web 令牌(JWT)的无状态客户端认证
- 简单但有效的客户端访问控制资源权限
- 基于 JSR-303 和 Hibernate Validator 的强大约束验证机制
- 对持久化、索引和缓存操作的每个对象控制
- 支持乐观锁定和事务(由每个
DAO
原生实现) - 高级序列化和反序列化功能(Jackson)
- 用于监控和诊断的完整指标(Dropwizard)
- 由 Google Guice 驱动的模块化设计和插件支持
- 用于翻译语言包和处理货币的国际化工具
- 带有嵌入式 Jetty 的独立可执行 JAR
- Para Web 控制台 - 管理员用户界面
架构
+----------------------------------------------------------+ | ____ ___ _ ____ ___ _ | | / __ \/ __` / ___/ __` / | | / /_/ / /_/ / / / /_/ / | | / .___/\__,_/_/ \__,_/ +-------------+ | /_/ | 持久化 | +-------------------+ +-----------------+ +-------------+ | REST API | | 搜索 |---| 缓存 | +---------+---------+--+--------+--------+---+------+------+ | | | +---------+---------+ +--------+--------+ +------+------+ | 签名请求和 | | 搜索索引 | | 数据存储 | | JWT 令牌 | | (任意) | | (任意) | +----+---------^----+ +-----------------+ +-------------+ | | +----v---------+-------------------------------------------+ | 客户端:JavaScript、PHP、Java、C#、Android、iOS 等 | +----------------------------------------------------------+
文档
阅读文档
博客
在我们的博客上阅读更多关于 Para 的内容
托管
我们在 paraio.com 提供托管和高级支持,您可以在那里使用免费的开发者账户在线试用 Para。通过 Web 控制台,只需几次点击即可浏览和管理您的用户和对象、执行备份和编辑权限。通过升级到高级账户,您将能够在几秒钟内扩展或缩小您的项目,并管理多个应用程序。
快速开始
- 下载最新的可执行JAR包
- 在JAR包所在的同一目录下创建配置文件
application.conf
。 - 使用以下命令启动Para:
java -jar -Dconfig.file=./application.conf para-*.jar
- 通过
npm install -g para-cli
安装 Para CLI - 为您的项目创建一个新的专用应用程序并保存访问密钥:
# 运行设置并将端点设置为 'http://localhost:8080' 或 'https://paraio.com'
# 根应用程序的密钥位于 application.conf 中
$ para-cli setup
$ para-cli new-app "myapp" --name "My App"
或者,您可以使用 Para Web控制台 来管理数据, 或者使用下面的API客户端之一将Para直接集成到您的项目中。
Docker
Para的标记Docker镜像位于Docker Hub的 erudikaltd/para
。
强烈建议您只拉取发布镜像,如 :1.45.1
或 :latest_stable
,
因为 :latest
标签可能存在问题或不稳定。
首先,创建一个 application.conf
文件和一个 data
文件夹,然后启动Para容器:
$ touch application.conf && mkdir data
$ docker run -ti -p 8080:8080 --rm -v $(pwd)/data:/para/data \
-v $(pwd)/application.conf:/para/application.conf \
-e JAVA_OPTS="-Dconfig.file=/para/application.conf" erudikaltd/para:latest_stable
环境变量
JAVA_OPTS
- Java系统属性,例如 -Dpara.port=8000
BOOT_SLEEP
- 启动延迟,以秒为单位
插件
要使用插件,创建一个新的 Dockerfile-plugins
,进行多阶段构建,如下所示:
# 将X.Y.Z更改为您想要使用的版本
FROM erudikaltd/para:v1.XY.Z-base AS base
FROM erudikaltd/para-search-lucene:1.XY.Z AS search
FROM erudikaltd/para-dao-mongodb:1.XY.Z AS dao
FROM base AS final
COPY --from=search /para/lib/*.jar /para/lib
COPY --from=dao /para/lib/*.jar /para/lib
然后只需运行 $ docker build -f Dockerfile-plugins -t para-mongo .
构建Para
Para可以使用JDK 8+编译:
要编译它,您需要Maven。获得Maven后,只需克隆并构建:
$ git clone https://github.com/erudika/para.git && cd para
$ mvn install -DskipTests=true
要生成可执行的"fat-jar",运行 $ mvn package
,它将位于 ./para-jar/target/para-x.y.z-SNAPSHOT.jar
。
总共将生成两个JAR文件 - fat版本的体积会稍大一些。
要构建不包含插件的基础包(不包括 para-dao-sql
和 para-search-lucene
),运行:
$ cd para-jar && mvn -Pbase package
要运行Para的本地实例进行开发,使用:
$ mvn -Dconfig.file=./application.conf spring-boot:run
独立服务器
您可以通过下载可执行JAR包并执行以下命令来运行Para作为独立服务器:
$ java -jar para-X.Y.Z.jar
然后您可以通过 Para Web控制台 console.paraio.org 浏览您的对象。 只需将API端点更改为您的本地服务器并连接您的访问密钥即可。 管理界面仅在客户端运行,您的密钥永远不会通过网络发送。相反, 系统会在本地生成JWT访问令牌,并在每次请求时发送到服务器。
或者,您可以构建WAR文件并将其部署到您喜欢的servlet容器中:
$ cd para-war && mvn package
下载JAR包
Maven依赖
您还可以通过将Para添加为依赖项来将其集成到您的项目中。Para托管在Maven Central上。
以下是要包含在 pom.xml
中的Maven代码段:
<dependency>
<groupId>com.erudika</groupId>
<artifactId>para-server</artifactId>
<version>{见上方绿色版本徽章}</version>
</dependency>
对于构建轻量级仅客户端应用程序连接到Para,仅包含客户端模块:
<dependency>
<groupId>com.erudika</groupId>
<artifactId>para-client</artifactId>
<version>{见上方绿色版本徽章}</version>
</dependency>
命令行工具
- Para CLI: para-cli
$ npm install -g para-cli
API客户端
使用以下客户端库快速将Para集成到您的项目中:
- Java: para-client
- JavaScript / Node.js: para-client-js
- PHP: para-client-php
- Python: para-client-python
- C# / .NET: para-client-csharp
- Android: para-client-android
- Swift / iOS: para-client-ios
数据库集成
使用以下DAO
实现连接到不同的数据库:
- DynamoDB:
AWSDynamoDAO
(包含在para-server
中) - MongoDB: para-dao-mongodb
- Cassandra: para-dao-cassandra
- SQL(H2/MySQL/SQL Server/PostgreSQL等): para-dao-sql
H2DAO
是默认的DAO
,它是SQL插件的一部分(与JAR文件打包在一起)
搜索引擎集成
Search
接口由以下实现:
- Lucene: para-search-lucene 默认(与JAR文件打包在一起)
- Elasticsearch: para-search-elasticsearch
- Elasticsearch v5.x: para-search-elasticsearch-v5 仅兼容ES 5.x,缺少一些最新功能,如AWS Elasticsearch支持。
缓存集成
Cache
接口由以下实现:
- Caffeine: 默认对象在本地缓存(包含在
para-server
中) - Hazelcast: para-cache-hazelcast(分布式)
队列实现
Queue
接口由以下实现:
- AWS SQS: 在
AWSQueue
类中 LocalQueue
用于单主机部署和本地开发
使用Para的项目
- Scoold - 一个开源的StackOverflow克隆
- ParaIO.com - 托管Para服务
- Erudika.com - 我们博客上的搜索栏使用Para
- Angular2演示应用 - 一个示例Angular2项目
- React演示应用 - 一个示例React项目
愿望清单/路线图
- Para
2.0
- 迁移到Quarkus,仅支持Java 13+,原生镜像 - GraphQL支持
获取帮助
- 有问题? - 在Gitter上提问
- 发现bug? - 在此提交bug报告
- 在Stack Overflow上使用
para
标签提问 - 对于Scoold相关的问题,在Stack Overflow上使用
para
标签
贡献
- Fork此仓库并将fork克隆到您的机器上
- 创建一个分支(
git checkout -b my-new-feature
) - 实现新功能或修复bug,并添加一些测试
- 提交您的更改(
git commit -am '添加了新功能'
) - 将分支推送到GitHub上您的fork(
git push origin my-new-feature
) - 从您的fork创建新的Pull Request
请尽量遵守此项目的代码风格。要检查您的代码,请通过样式检查器运行它:
mvn validate
更多信息请参阅 CONTRIBUTING.md