我一直在考虑将Parse.com的服务用于我的后端,但我对它的可扩展性持怀疑态度。
真的可以处理几千个并发用户吗?如果没有,他们有什么好的方式从它过渡?
答案 0 :(得分:75)
我知道这个问题可能已经过时了,但我想为那些可能正在考虑解析的人提供2美分......
在最简单的场景下,解析可能效果很好。一旦你需要扩展到更复杂的查询,我个人发现只有头痛。
查询限制为1000条记录。最初,您可能认为这不是问题,直到您开始处理子查询,并且实现了奇怪的数据,因为子查询会在没有警告或错误的情况下关闭记录。 (仅供参考,默认为100条记录,除非您指定的限制最多为1000条,因此如果您不注意,问题会更严重。)
由于某些奇怪的原因,您可以在一分钟内发出计数查询的次数有限制。 (这个限制似乎非常低)。准备好尝试限制你的代码,这样你就不会达到这个限制,否则会引发错误。
后台作业无法可靠运行。我有一个后台工作设置每5分钟运行一次,有时需要20分钟才能开始工作。
很多超时。这是给我最多胃灼热的一个。
答:如果你有一个需要一段时间才能处理的云功能,你有大约6到7秒的时间来完成它,否则它会让你失望。
B.我觉得系统普遍存在不稳定性。我会定期遇到一些问题,这些问题似乎持续了大约一个小时左右,其中超时发生的频率更高(而且相对简单的功能应立即返回)。
我完全后悔自己决定使用解析,我正竭尽所能让应用程序保持足够长的时间以便我们获得资金,这样我们就可以离开平台了。如果有人有任何更好的解析方法,我会全力以赴。
答案 1 :(得分:35)
[编辑:在与团队共度三年之后,我决定继续前进,不再是Parse或Facebook的员工。团队掌握得很好,做了很棒的事情。整个后端已被重写,以显着提高性能和可靠性。路线图很棒,我希望团队能够做出很棒的贡献。在我离开时,Parse为超过600,000个应用程序提供了支持,并且每天提供令人难以置信的请求数量。如果将每个Parse推送到一个独特的人,他们可以在一天内成为世界第四大国家。有关Parse的未来帮助,请在此处使用parse.com标记发布问题或发布到解析开发人员Google小组。]
完全披露:我是一名解析工程师。
Parse已经托管了数千个应用,更不用说用户了。当我们在3月下旬退出测试版时,我们announced在Parse上运行的10,000多个应用程序的月增长率为40%。 Parse拥有一支世界级的团队,其中许多人拥有多年的大数据和大量流量经验。
我们张开双臂欢迎您的交通;您将与Band of the Day和Hipmunk等优秀团队合作。我们对我们的服务非常有信心,我们建立了One Click Export系统,所以像你这样的人可以尝试Parse风险。如果您觉得Parse不符合您的性能期望,我们很乐意将您的所有数据保存完好。
答案 2 :(得分:23)
我们选择Parse作为我们应用的后端。 结论:DON' T。
稳定性是一场灾难,性能也是灾难,支持也是如此(可能因为它们无法帮助您,因为所有问题都是不可重现的。)
运行即使是最简单的函数也可能导致Parse中的随机超时(例如我在谈论简单的PFUser登录调用):
Error: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo=0x17e42480 {NSErrorFailingURLStringKey=https://api.parse.com/2/client_events, NSErrorFailingURLKey=https://api.parse.com/2/client_events, NSLocalizedDescription=The request timed out., NSUnderlyingError=0x17d10e60 "The request timed out."} (Code: 100, Version: 1.2.20)
我们每天都会遇到超时,这是我们正在测试最多10个用户的应用程序!
这是我们一直回来的典型,在完全随意的时刻,不可能重现。调用Cloud Code函数,执行一些查询和一些插入:
{"code":124,"message":"Request timed out"}
10分钟后尝试相同,并在不到一秒的时间内运行。 20分钟后再试一次,执行需要30秒。
因为没有事务性,所以在1个云代码函数中存储例如3个对象时真的很有趣,其中Parse决定在让我们保存3个中的2个之后随机退出函数对象。很高兴保持数据库的一致性。
" best"我们得到的地方。请注意,这是从云代码功能返回的实际数据:
{"code":107,"message":"Received an error with invalid JSON from Parse: <!DOCTYPE html>\n<html>\n<head>\n <title>We're sorry, but something went wrong (500)</title>\n <style type=\"text/css\">\n body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }\n div.dialog {\n width: 25em;\n padding: 0 4em;\n margin: 4em auto 0 auto;\n border: 1px solid #ccc;\n border-right-color: #999;\n border-bottom-color: #999;\n }\n h1 { font-size: 100%; color: #f00; line-height: 1.5em; }\n </style>\n</head>\n\n<body>\n <!-- This file lives in public/500.html -->\n <div class=\"dialog\">\n <h1>We're sorry, but something went wrong.</h1>\n <p>We've been notified about this issue and we'll take a look at it shortly.</p>\n </div>\n</body>\n</html>\n"}
我在这里描述的东西并不是在我们项目的蓝色月亮中发生的事情。除了500个错误(我在一个月内遇到过两次),所有其他错误每天都会被看到。
所以是的,它很容易上手,但你必须考虑到你正在一个不稳定的平台上工作,所以要确保你的重试和指数退避系统启动并运行,因为你需要这个!
让我最担心的是,我不知道一旦有20.000人开始在这个后端使用我的应用程序会发生什么。
编辑:
现在我在进行PFUser登录时有这个:
Error: Error Domain=PF_AFNetworkingErrorDomain Code=-1011 "Expected status code in (200-299), got 502" UserInfo=0x165ec090 {NSLocalizedRecoverySuggestion=<html><body><h1>502 Bad Gateway</h1>
The server returned an invalid or incomplete response.
</body></html>
, PF_AFNetworkingOperationFailingURLResponseErrorKey=<NSHTTPURLResponse: 0x16615c10> { URL: https://api.parse.com/2/get } { status code: 502, headers {
"Cache-Control" = "no-cache";
Connection = "keep-alive";
"Content-Length" = 107;
"Content-Type" = "text/html; charset=utf-8";
Date = "Mon, 08 Sep 2014 13:16:46 GMT";
Server = "nginx/1.6.0";
} }, NSErrorFailingURLKey=https://api.parse.com/2/get, NSLocalizedDescription=Expected status code in (200-299), got 502, PF_AFNetworkingOperationFailingURLRequestErrorKey=<NSMutableURLRequest: 0x166f68b0> { URL: https://api.parse.com/2/get }} (Code: 100, Version: 1.2.20)
难道不是很好吗?
答案 3 :(得分:20)
如果您正在编写一个小/简单的应用程序(或一次性原型),后端几乎没有逻辑,那就去做吧,但对于更大/可扩展的东西,最好避免它,我可以从第一手经验说出来。这一切听起来不错,包括用户管理,推送通知,抽象存储以及什么不是,但最终它不值得麻烦。也就是我正在开发Parse应用程序的后端,客户非常喜欢它,因为它听起来很酷且很有前景(我猜的是强大的营销),被Facebook收购但是什么不是,但是几个星期的生产主要问题/限制与平台开始出现,应该是一个简单的应用程序,结果证明是一个开发和扩展的噩梦。
项目的结果/结论: - 打破了一个相对简单的应用程序的时间窗口 - 它应该持续2-3个月,它持续了近一年但仍然不稳定/可靠,如果我们使用自定义堆栈它可以在里面完成确定的时间窗口我在5-10天内使用自定义节点堆栈制作了类似的演示项目 - 失去了客户的信任,他们现在正在与另一个使用自定义堆栈的团队重新构建应用程序 - 为打破时间窗口并试图使其工作而丢失了大量现金 - 做了这么多加班的原因,它开始反映我的健康状况 - 永远不要使用一些承诺拥有一切的平台/解决方案,总是使用自定义/尝试过的堆栈
首先是稳定性问题以及服务器停机和随机错误等平台的不断失败,但它们已经整理好了(即2014年中期),但仍存在以下问题:
一个任意的例子:你想从他们的数据库中获取一个随机项,你的应用程序调用一个提供它的作业(1个API调用),该作业查询数据库,但你必须做2个调用,首先获取项目的计数(1个API调用),然后是第二个获取随机项目(1个API调用),这是针对该功能的3个API调用,每秒60个请求,20个用户可以在达到请求限制之前的某个时间进行该呼叫,并且平台变得混乱,在您包含浏览应用程序屏幕和其他内容的其他用户之后,您会看到这导致... ...
如果有任何优秀的Facebook不会因为某些应用程序使用它而一次性购买它吗?我建议3件事: - 首先 - 不要听Parse家伙,这是他的平台,所以他必须推广它,听听那些一直用它来制作东西的人 - 第二 - 如果您需要一个严肃且可扩展的平台并且不想完全定制,请使用Amazon Cloud服务或类似的经过测试和可靠的类似服务 - 第三 - 如果您有任何服务器方面的经验,请远离平台,如果您不去为该项目雇用后端开发人员,那么它会更便宜并且您将获得一个有效的解决方案端
答案 4 :(得分:11)
我花了一天的时间研究parse.com,这是我目前基于我发现的事情的意见(请记住,我对使用SDK进行开发只有非常简短的经验)..
Parse.com显然有一些非常有吸引力的积极因素,这就是为什么我发现自己正在调查它,但为了辩论,我将集中精力批评,因为伟大的积极因素都列在他们的网站上。 (为了解决这么大的问题,parse.com做得很好!)......答案 5 :(得分:11)
我为自己的类似question的答案运行了测试,它可能非常,非常快。但是,您获得的结果可能取决于您的实施细节......
测试将Android SDK与Android进行了比较,使用本机HTTP堆栈进行Parse / REST调用...
测试详情:
测试环境 - 通过快速WIFI连接在10个月大的手机上的最新Android版本。
(上传63张图片,其中avg filesize = 80K)
使用android SDK RESULT =慢性能
测试1使用原生REST调用通过android RESULT = VERT FAST
进行测试2- 编辑 - 因为这里有兴趣......
关于http thruput,解析SDK(android)和性能,可能是parse.com在parse.android SDK中实现android asyncTask()的方式上没有优化性能?如何工作需要8分钟。在parse.sdk上可以在3秒内完成优化的REST,DIY框架(请参阅链接了解有关实现的详细信息),我真的不知道。如果解析没有修复他们的SDK实现,因为这些比较测试运行,那么你可能不希望他们的默认SDK asnycTask东西做任何接近网络上的实际工作负载。
答案 6 :(得分:8)
Parse(和类似的SaaS)的巨大吸引力在于,您可以节省数万个后端开发成本。鉴于后端通常是Web应用程序中最昂贵的方面;头疼的是突然 poof 。
Parse和大多数(所有)SaaS的问题在于您无法控制区域,电源,内存,带宽,可伸缩性,阈值,警报和各种操作。
与Shopify相同。这是一个伟大的萨斯,可以全面控制产品,订单,库存和美学 - 但对机器无控制。所以,今天的SaaS并不比godaddy有很多不同。为了赚钱,他们总是夸大或超出他们的机器;如果你真的关心屁股踢性能你就会陷入困境。你甚至不能购买这种服务水平。
我想要的东西至少与AWS控制台一样强大和全面。大多数技术人员都知道并接受Heroku和Parse都在AWS上托管。谁在乎。因此,为增加的服务收取更多费用,但不要拒绝访问那些使网站和应用程序以及用户体验zing的关键低级工具。提示那些Parse员工。
无论如何,回答这个问题:
Parse API是简单的JSON。因此,您可以使用与Parse应用程序所期望的相同JSON格式抽出数据。
您甚至可以使用他们的PFObject(iOS)。在某些时候,所有高级API都会转到常见的HTTP请求/响应。关于REST的一般性的好处意味着普通的货架;像http,url,字符串和utf这样的东西。这里没有时髦的Orb。
答案 7 :(得分:5)
Parse非常适合从特别是有关用户管理的辅助功能/功能开始。但我开始遇到问题..
执行/ ping时间长,1000个对象限制包含子查询,欧洲没有数据中心(据我所知)
如果能够对性能和稳定性问题进行排序,那将是一个神圣的平台。我不知道后悔用它开发,但我放了5000多行代码,所以我会坚持下去。
也许他们应该将他们的DEV应用程序和PROD应用程序环境分开,只允许在某种监督下使用PROD应用程序,或者只为付费客户创建不同的环境?
我们在2014年,每月20美元的服务器可以处理未经优化的网站(主页上有60个未缓存的数据库查询),每月访问量达100万次,这对Parse来说应该不会那么难!
答案 8 :(得分:2)
可以对应用程序进行原型设计,特别是如果iOS / Android开发人员不知道如何自己构建DB / API后端。
当开发一个需要比以下查询更复杂的逻辑的应用程序时,它根本不行;
SELECT * FROM 'db' WHERE 'column' = 'value' LIMIT 100;
Parse上不存在相关查询和内部联接。如果你需要,那么祝你好运更新/删除320 000条记录(这就是我现在正在使用的数字)。
唯一真正有用的是通过SDK处理用户。如果我能找到一个好的文档甚至教程如何使用Django和DRF / Tastypie通过iOS / Android应用程序处理/创建用户,我立即转换所有内容正在我们公司开发使用它。