部署和扩展MeteorJS应用程序及移动应用开发指南
1. 使用Meteor Cluster进行扩展
Cluster是一个MeteorJS包,可使用
meteor add meteorhacks:cluster
命令将其与应用程序一起安装。它能解决诸多问题:
-
内部扩展解决方案
:与使用Nginx的扩展方法不同,使用Cluster配置应用程序扩展时,无需安装和配置其他外部服务器或代理。
-
避免连接重置
:向Nginx负载均衡器添加新实例时,会重新配置服务器,导致DDP连接重置。而Cluster不会出现这种情况。并且,若负载均衡器出现故障,使用Cluster也有优雅的解决方案。
-
服务发现
:Cluster通过MongoDB进行服务发现,它将实例详细信息存储在MongoDB中,以此识别实例并路由流量。部署时,需导出以下环境变量:
export CLUSTER_DISCOVERY_URL=mongodb://host:port/db,
# 这是服务器的直接URL(可能是私有URL)
export CLUSTER_ENDPOINT_URL=http://ipaddress
# 将服务器标记为Web服务(可设置任意名称)
export CLUSTER_SERVICE=web
设置好这些环境变量后,可按需添加或删除实例,Cluster会自动处理负载均衡。
2. Cluster的其他特性
- 粘性会话处理 :当来自唯一IP地址的请求到达时,会在客户端设置一个cookie,确保每次该IP地址发出请求时,都能重定向到同一实例。
-
多负载均衡器
:为避免单个负载均衡器成为瓶颈,可通过导出
export CLUSTER_BALANCER_URL=<another instance url>将其他实例转换为负载均衡器,确保即使主实例出现故障,请求仍能通过其他配置的实例进行平衡。 -
多核支持
:通过导出
export CLUSTER_WORKERS_COUNT=auto可利用多核支持。Cluster会创建应用程序的克隆(即工作进程),以不同方式分配流量:静态请求由主应用程序处理,SockJS请求通过主应用程序代理到工作进程,WebSocket请求则由工作进程直接处理。 -
SSL支持
:为保证安全,支持SSL很重要。若使用mup,它会在应用程序前安装Stud进行SSL终止;若不使用mup,则可使用Node.js包
http-proxy或Meteor-SSL-proxy。
3. Mup与Cluster结合
Mup支持多环境部署,可在
mup.json
文件中指定所有必要的环境变量,示例如下:
{
// 服务器认证信息
"servers": [
{
"host": "ip-1",
"username": "root",
"pem": "./bulletproofdo",
"env": {
"CLUSTER_BALANCER_URL":
"https://one.bulletproofmeteor.com"
}
},
{
"host": "ip-2",
"username": "root",
"pem": "./bulletproofdo",
"env": {
"CLUSTER_BALANCER_URL":
"https://two.bulletproofmeteor.com"
}
},
{
"host": "ip-3",
"username": "root",
"pem": "./bulletproofdo",
"env": {
"CLUSTER_BALANCER_URL":
"https://three.bulletproofmeteor.com"
}
},
{
"host": "ip-4",
"username": "root",
"pem": "./bulletproofdo"
}
],
// 在服务器上安装MongoDB,未来设置时不破坏本地MongoDB
"setupMongo": false,
// 警告:需要Node.js!仅当服务器上已安装Node.js时可跳过
"setupNode": true,
// 警告:若省略nodeVersion,默认设置为0.10.33。不要使用v,仅使用版本号
"nodeVersion": "0.10.33",
// 在服务器上安装PhantomJS
"setupPhantom": true,
// 应用程序名称(无空格)
"appName": "meteor",
// 应用程序位置(本地目录)
"app": "../",
// 配置环境
"env": {
"ROOT_URL": "https://bulletproofmeteor.com",
"MONGO_URL": "mongodb://app:password@mongodb.com/dbname",
"MONGO_OPLOG_URL": "mongodb://app:password@mongodb.com/local",
"DISABLE_WebSockets": "1",
"CLUSTER_DISCOVERY_URL":
"mongodb://app:password@mongodb.com/dbname",
"CLUSTER_SERVICE": "web"
},
// Meteor Up在部署后检查应用程序是否上线
// 在检查之前,它将等待以下配置的秒数
"deployCheckWaitTime": 15
}
4. Oplog Tailing设置
Oplog Tailing可使MeteorJS应用程序更快。要理解它,需先了解MongoDB副本集:
-
MongoDB副本集
:生产环境中,通常会有多个数据库进程作为备份,其中一个为主进程,其余为从进程。应用程序的写入操作发生在主进程,数据随后复制到从进程。从进程通过操作日志(oplog)复制数据,每当数据发生更改时,操作日志会记录这些更改,从进程复制这些操作并更新自身。
-
创建副本集
:使用以下命令创建不同的MongoDB进程:
mongod --replSet <some-id> --port 27017 --dbpath <database/path> --fork --logpath <database/log/path>
mongod --replSet <some-id> --port 27016 --dbpath <database/path> --fork --logpath <database/log/path>
<some-id>
必须是唯一字符串,且两个命令中的该字符串需相同。创建好进程后,登录到其中一个进程的mongo shell(选择要作为主进程的那个),运行以下命令:
config = {_id: '<some-id>', members: [{_id: 0, host: 'localhost:27017'}, {_id: 1, host: 'localhost:27016}]};
rs.initiate(config);
可使用
rs.status()
命令检查状态,通过以下代码更改主从配置:
config.members[0].priority = 1
config.members[1].priority = 0.5
rs.reconfig(config)
优先级最高的成员将成为主数据库。
-
创建读取oplog的用户
:进入MongoDB进程的admin数据库,添加用户:
db.addUser({user:'oplogger',pwd:'YOUR_PASSWORD',roles:[], otherDBRoles:{local:["read"]}})
- 应用程序访问oplog :导出环境变量:
export MONGO_OPLOG_URL='mongodb://oplogger: YOUR_PASSWORD@localhost:27017,localhost:27016/ local?authSource=admin'
这样,MeteorJS应用程序将监听oplog并优化数据差异操作。
5. 第三方MeteorJS托管解决方案
选择第三方托管解决方案时,需注意粘性会话支持、WebSocket支持等。以下是一些流行的托管解决方案:
| 托管解决方案 | 特点 |
| ---- | ---- |
| Meteor Galaxy | MeteorJS的官方托管平台,在AWS EC2上的Docker容器中托管应用程序,可监控并替换故障容器,提供实时指标和仪表盘,支持
meteor deploy
命令。 |
| Modulus.io | 主要针对Node.js应用程序,创建了demeteorizer构建工具,运行在AWS上,提供可轻松扩展的VPS,支持粘性会话、WebSocket、SSL端点和Node.js,但无显式oplog支持。 |
| Digital Ocean | 受MeteorJS开发者欢迎,提供裸VPS,可自行配置应用程序,有很多关于部署MeteorJS应用程序的文章,Mup与之兼容性好,价格合理。 |
| Compose | 广泛使用的MongoDB解决方案,提供oplog支持,维护备份,提供试用。 |
| MongoLab | 提供0.5GB存储的沙箱版本,支持专用和共享托管。 |
6. 移动应用开发
随着移动平台流量的增加,移动应用开发需求迅速增长。MeteorJS支持移动平台,目前支持iOS和Android,未来有望支持Windows。它使用Cordova/PhoneGap构建应用程序。
-
Cordova简介
:Apache Cordova是一个移动开发框架,可使用HTML、CSS和JavaScript构建移动应用程序,提供容器运行代码,并可访问一些本地设备功能,隐藏平台差异,以统一方式向JavaScript环境暴露设备功能。
-
创建和运行应用程序
1. 创建MeteorJS应用程序,如
mobileMeteor
,添加目标平台:
meteor add-platform android
meteor add-platform ios
2. 准备工作:
- **iOS**:需安装Xcode,若要在真机上运行,需有Apple开发者账户。
- **Android**:需安装JDK和Android SDK,确保安装的Android SDK受Cordova支持,若将Android SDK放在自定义路径,需设置环境变量。
3. 运行应用程序:
- **模拟器**:在iOS上运行`meteor run ios`,在Android上运行`meteor run android`。
- **真机**:将设备连接到本地机器,确保在同一本地网络。在Android上运行`meteor run android-device`,在iOS上运行`meteor run ios-device`。
MeteorJS应用程序通过合适的工具和技术可以进行扩展和部署,并且能轻松开发移动应用程序。无论是在Web端还是移动平台,都能发挥其优势。
7. 移动应用开发的优势与潜力
使用MeteorJS进行移动应用开发具有诸多优势,以下为详细分析:
-
单一代码库多平台支持
:借助MeteorJS,开发者只需维护一个代码库,就能同时支持iOS和Android平台。这极大地减少了开发和维护的工作量,节省了时间和资源。例如,开发者可以使用相同的代码逻辑实现应用的核心功能,如用户登录、数据展示等,而无需为不同平台编写不同的代码。
-
实时更新
:MeteorJS的热代码推送功能同样适用于移动应用。这意味着开发者可以在不重新发布应用的情况下,实时更新应用的内容和功能。例如,当应用出现紧急修复或需要更新新功能时,开发者可以直接推送更新,用户无需手动下载和安装新版本。
-
集成原生功能
:通过Cordova,MeteorJS应用可以访问一些本地设备功能,如GPS、加速度计、相机等。这使得应用能够提供更丰富的用户体验,满足用户的多样化需求。例如,一个健身应用可以利用GPS功能记录用户的运动轨迹,利用加速度计检测用户的运动状态。
8. 移动应用开发的流程总结
以下是使用MeteorJS开发移动应用的详细流程:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px
A([创建MeteorJS应用]):::startend --> B(添加目标平台):::process
B --> C{选择开发环境}:::decision
C -->|模拟器| D(安装相关依赖):::process
C -->|真机| E(准备设备和账户):::process
D --> F(运行应用到模拟器):::process
E --> G(连接设备到本地机器):::process
G --> H(运行应用到真机):::process
F --> I(测试和调试):::process
H --> I
I --> J([发布应用]):::startend
9. 移动应用开发的注意事项
在使用MeteorJS开发移动应用时,还需要注意以下几点:
-
性能优化
:由于移动设备的资源有限,因此需要对应用进行性能优化。例如,减少不必要的网络请求、优化代码结构、压缩图片等。
-
用户体验设计
:移动应用的用户体验至关重要。开发者需要根据移动设备的特点,设计简洁、易用的界面,确保用户能够轻松地使用应用。
-
安全问题
:移动应用涉及用户的个人信息和数据,因此需要重视安全问题。开发者需要采取必要的安全措施,如加密数据传输、防止SQL注入等。
10. 总结
通过对MeteorJS应用程序的部署、扩展以及移动应用开发的介绍,我们可以看到MeteorJS在Web和移动领域都具有强大的能力。以下是对全文内容的总结:
| 方面 | 要点 |
| ---- | ---- |
| 部署和扩展 | 可使用Cluster进行负载均衡和扩展,解决常见的扩展性问题;通过Oplog Tailing设置提高应用程序性能;选择合适的第三方托管解决方案。 |
| 移动应用开发 | 支持iOS和Android平台,使用Cordova构建应用程序;具有单一代码库多平台支持、实时更新、集成原生功能等优势;遵循特定的开发流程,注意性能优化、用户体验设计和安全问题。 |
MeteorJS为开发者提供了一个强大而便捷的开发平台,无论是构建Web应用还是移动应用,都能帮助开发者快速实现目标。随着技术的不断发展,相信MeteorJS将在未来的开发中发挥更大的作用。
超级会员免费看

被折叠的 条评论
为什么被折叠?



