欢迎大家赞助一杯啤酒🍺 我们准备了下酒菜:Formal mathematics/Isabelle/ML, Formal verification/Coq/ACL2, C++/F#/Lisp
Apache Usergrid
Apache Usergrid 是一个面向web和移动应用的多租户 Backend-as-a-Service 堆栈,基于 RESTful APIs,使用 Apache Cassandra 做后端存储。
目录 |
版本
new "core persistence" engine in Usegrid 2.1 has been under development for two years now. Internally, this new engine provides a set of new modules for Entity Collections, Graph database, Maps, Query-Index, Queues and Caching. The core persistence design favors simple and composable operations that can be made asynchronous via RxJava, uses Multi-Version Concurrency Control (MVCC) to avoid use of locks and the Query-Index module relies on Elasticsearch.
- 2.0
- 1.0
应用对象
Usergrid提供了一组核心应用程序对象,主要实现了对用户的管理以及对交互性的增强、通过自由的数据存储系统存储数据、检索以及返回任何类型的内容和对象集合等。Usergrid也提供了对日志数据的支持,这使得实时事件分析和关键指标的跟踪成为可能,这块可考虑由OpenTSDB提供服务。
应用对象(Data Entity Types)包括:
- 用户(user)
- 用户组(group)
- 角色(role)
- 应用(application)
- 行为(activity)
- 设备(device)
- 资源(asset)
- 目录(folder)
- 事件(event)
- 通知(notifier)
- 通告(notification)
- 收到(receipt)
每个对象都被保存在其各自的集合中(/users,/groups……)。Usergrid也允许创建用户想要的任何类型的动态(自定义的)实体。动态实体会被自动保存在以实体类型复数为名称的集合中。
所提及的消息(message)概念是以notifier、notification、receipt数据实体类型体现。
Activity Streams
Activity是一个代表Activity Stream actions的实体类型。
Activity Streams 用来描述一个社交网络中的个体的一系列活动。比如 Facebook 的 News Feed(新鲜事)就是一条 Activity Streams 消息。目前 Activity Streams 已经成了 OpenSocial 的标准数据格式并被广泛地支持。Activity Streams entry 元素总是包含三个主元素,它们分别是:actor,即执行动作的人,例如:DoctorWang;verb,即执行的动作类型,例如:admit;object,即动作所针对的对象,例如用户 John。
授权
Usergrid的API实现了OAuth 2.0的授权模型,所有的请求都需要带有有效的访问令牌。
消息
Usergrid提供了一个消息队列服务,该服务为保证高扩展性的同时向应用中分发消息所设计。此外为了使消息队列服务具备一定的灵活性,还将会增加客户通知、社交收件箱、内容源、评论功能以及其他一些常见的消息队列操作。该框架支持使用Websocket来进行实时处理。
集成RabbitMQ
REST API
- Usergrid REST API 构建在 Jersey 之上。
- Jersey @ Usergrid
- Jackson 处理 JSON 数据。
SDK
iOS
目前基于Objective-C,希望以后提供SwiftSDK。
Android
H5/JS
Node.js
Go
- 基于REST API,支持 Go 语言,提供 Go SDK。
- 集成 Go 提供的高并发处理基础设施。
权限
- 用户和组权限建立在Apache Shiro之上。
安装
指南
确保已正确安装 Apache Cassandra,下载usergrid包并解压
cd stack mvn clean package -DskipTests=true cd launcher; java -jar target/usergrid-launcher-*.jar curl http://localhost:8080/status curl -X POST \ -d 'organization=myfirstorg&username=myadmin&name=Admin&[email protected]&password=password' \ http://localhost:8080/management/organizations curl 'http://localhost:8080/management/token?grant_type=password&username=myadmin&password=password'
你也能以 tomcat webapp 的方式运行, 移除 tomcat/webapps/ROOT 下的内容,将 usergird/rest/ROOT.war 拷贝到这
cd tomcat/lib 创建 ____usergrid-custom.properties____
usergrid.sysadmin.login.allowed=true usergrid.sysadmin.login.name=superuser usergrid.sysadmin.login.password=pw123 [email protected] [email protected] usergrid.management.mailer=Myself<[email protected]> [email protected] usergrid.test-account.admin-user.password=test
数据库设置
http://localhost:8080/system/database/setup
管理员设置
http://localhost:8080/system/superuser/setup
控制台, 配置文件 usergrid-custom.properties
http://localhost:8080/usergrid-portal
部署方式
Elasticsearch
Cassandra
性能
- Scaling Usergrid to over 10,000 requests/second - Part 1 10,268 Requests Per Second with 35 c3.xlarge Usergrid servers and 9 c3.4xlarge Cassandra nodes.
- 引入Akka高并发框架。
RPC
- Cassandra RPC 9160端口
- 参考猎豹移动的Go架构
- grpc和go语言实现
开发者
- Usergrid Creator, Ed Anuff
用户
文档
- Building Your Own BaaS With Apache Usergrid & Docker: Lessons Learned At Scale
- How to Contribute to Apache Usergrid
- Apache Usergrid Internals
- Open Source Mobile Backend on Cassandra