新手问题 Shopify 原理

luffycn · December 15, 2014 · Last by everpointer replied at December 18, 2014 · 5876 hits

注册个用户名,就可以在子域名生成一个网店

这个在程序流程上的原理是怎么样的? 我想应该不是,每个子域名都去部署一个应用程序吧?

怎么做到用很简单的方式,一个用户名对应一个自己的网店 各个网店之间的数据又是互相独立的

应该就是多加一条路由吧

@w7938940 那数据了?数据不会因为多加一个路由就能互相独立吧? spree 是否能方便做到数据独立

数据可以放在一起的

可以,下面得 route 把外界访问都转移到 domain 下,实现了多个域名绑定到一个站点,并且各自独立。

# visit from outside
scope module: 'domain', constraints: SiteConstraint.new do
  get '/', controller: :home, action: :index
  get ':action', controller: :home
  get 'catalogs/list_(:id)_(:page)', to: 'catalogs#show', default: {formmat: "html"}
  get 'articles/:id', to: 'articles#show'
  get 'pages/:id', to: 'pages#show'
  get 'products/:id', to: 'products#show'
end
class SiteConstraint
  def initialize
    $RUNNING_SITES = Site.select(:domain).all_actived.map{|ss| ss.domain }
    puts Time.now.to_s(:db) + "*"*100
    puts "Running sites: #{$RUNNING_SITES.join(', ')}"
  end

  def matches?(request)
    $RUNNING_SITES.include?(request.host)
  end
end

个人觉得 class SiteConstraint 写的不好,还没想到好方法。

#2 楼 @luffycn 数据其实可以放到一起。。。但是你一个站新建个 db 也是可行的。

@est 你的意思是,每个 username 都有自己独立的 DB,但是共用同一个 application ?

就是共用一个数据库的,逻辑独立。

泛域名解析 + 默认主机头 + 路由

#6 楼 @luffycn 可以这样搞。一个子域名一个 db,但是所有子域名跑同一套代码。

如果你的站足够大,以后可能会多个实例集群。

云计算里面的 IaaS、PaaS、SaaS 三层,IaaS 对数据隔离特性要求最高,而 SaaS 对数据隔离特性要求最低。 SaaS 的应用,在数据隔离上,有三种做法:数据库实例隔离、表隔离(@hooooopo 指出的 newrelic 就是这种)、元数据隔离。

这三种隔离方式,在研发友好速搭期间,都尝试过。最后我们用的,是成本最低的元数据隔离方案。把所有数据(订单、商品、主题文件等)都存在数据库。后面就是从零开始写业务逻辑。目前针对国内的电商业务,友好速搭比 shopify 好很多。

国内很多同类产品,总在代码层面偷懒,稍微修改现有开源系统,搞个自动部署,就拿出来促进主机和域名销售,这么做成本不低,受到制约很多,没法在软件层面形成竞争力。

#12 楼 @ChrisLoong 请问元数据隔离具体是怎么实现的呢?

#13 楼 @blacktulip 其实就是外键隔离。所谓“元”,就是为每位用户生成的标识。然后这个用户所有相关数据,都带这个标识的外键。

#13 楼 @blacktulip 元数据隔离,就是每条数据有个 app_id 属性。。。。这种描述数据的数据就叫元数据。。。听起来高大上的名词实际上在代码里就一句话:

if session[:user_id] == Item.user_id 类似的。。。。

#12 楼 @ChrisLoong 这硬广告打得。。。。。。话说你们网站有严重的 ycombinator 教科书风格啊。。。。各种 pattern 都是 100% 符合各种 startup 教条的。。。。。。。

@ChrisLoong 请教下,一套模板适用于网站 手机 的 HTML 上的设计原理是怎么样的? 另外,你提到的友好速搭在软件层面的竟争优势有哪些了

@est 一个用户名对应一个 DB,是不是比上面提到的元数据隔离还要更简单,连 if 都不用带到 application 里面判断 了?

#18 楼 @luffycn 如果一个用户管理多个店铺呢?

#17 楼 @luffycn 就是自适应,是个体力活。建议你自己对比感受下,非常欢改进意见或 bug 反馈 😃

#18 楼 @luffycn 可以这样认为。搞一个根据二级域名自动切换 db 的 middleware。

#12 楼 @ChrisLoong 我们公司还是使用 domain+ 外键隔离。

@ChrisLoong 体验了下,确实不错。bootstrap 也号称能适应各种设备,但实际使用起来效果并不太理想,spree 用了 bootstrap 模板在手机上的效果并不好,还要多方面的修改

#23 楼 @luffycn 自适应这块,确实难搞,只是能确保手机下可以用,但展示效果,没大屏幕好。 我们有用户,只在微信里面做推广运营,很重视手机端的体验,就用了单独的手机主题。 我们近期也会在主题市场,推出这套 mobile only 的主题。

#22 楼 @small_fish__ domain 不变的话也挺好。用自己生成的标识,可以确保长度规则统一。

@ChrisLoong 你是指为了满足这部分 mobile 用户,只能单独推出相应的主题,只适应 mobile?,放弃既能在桌面端显示,又能在 Mobile 显示?

#26 楼 @luffycn 对,有些用户,就是专注在微信运营推广,不考虑 PC。

@ChrisLoong 电脑端的 B2C 有淘宝,京东,一号店这些大头在垄断着,小型的商家自己搞个店铺基本上没什么机会,推广门槛很高,而现在流行的微商,利用微信进行朋友圈的营销,还挺管用的。这可能是为何 手机版网站会比较流行的原因吧。

另外,你们那边有推荐客户奖励机制吧?向你们那推荐客户能获取一定的推荐费的?

#28 楼 @luffycn 嗯,平台电商很热,如果想尽量多卖货,去商场平台没错的。不过,据我们了解,某猫里面 90% 的商家是在亏损陪玩阵列,里面还是传统知名品牌出货量最大。 独立电商需要暖暖的做生意,不要急着多卖货,把熟客资源盘活,经营自己的小品牌,虽然过程缓慢,但生命力持久。广东这边,很多这类优质商家。

推荐客户奖励,目前没有哎。不过正在构建合伙伙伴体系,你有技术,可以帮人建站,享受长期返点回馈。

@ChrisLoong 合作伙伴体系,具体怎么操作?

#30 楼 @luffycn 合伙伙伴有单独的后台。 目前有三种收益方式(以后也许有更多): 帮客户创建网站,开发费用自行协商。网站做好就可以转给客户,以后这个站的月租,都会收到提成。 还有另一块,就是主题市场,可以开发付费版的主题,放到主题市场,有客户购买,就有收入。 类似主题市场,还会有插件市场,广州这家摄影工作室的预订就是通过插件做的。

合作伙伴是邀请制,有意向的话,可以发邮件到 [email protected],介绍自己的技术背景,以及过往项目案例,我们评估通过后,会进一步联系。如果离我们公司近,也可以抽空来办公室聊,随时欢迎。

@ChrisLoong 有点不理解的是,每个月给个几百就能自动生成一个网店了,为何还需要去建站?

#32 楼 @luffycn 这里的建站,主要是帮助用户定制主题,虽然有主题市场,主题可以改配色、配图等,但是差异化不够。我们提供完全可编程的主题模板,只有开发者,才能充分发掘它的潜力。

强势围观

@ChrisLoong 听上去更像是前端工程师或者设计师更能做好的一个工作。我前端很弱 都是 copy 别人的 css style 或者在现成的 CSS 代码稍微修改。

#35 楼 @luffycn 对,主题定制,主要是设计和前端。就算只懂一点,也比完全不懂代码的用户,强很多了。 擅长后端的,可以开发插件应用,自己部署,然后 iframe 嵌入网站给用户用。

@ChrisLoong 有时候客户的要求会比你想像的来得更苛刻一点。单纯的前端修改可能也无法满足,比如某个客户经营的是茶类的销售,他可能希望主题能贴近自然生态,这是需要一定的设计功底。后端工程师去折腾这些 photoshop 成本会有点高

#37 楼 @luffycn 是的,很理解。我们初创团队,在大学期间,就成立工作室帮客户做网站。毕业以后,有各自工作,还在炒更做网站。前端工程师,大都有 ps 基础,偏向后端的,可能不太会用 ps,最好有个小团队合作。 可编程的主题,就是可以用来 100% 还原设计稿。

@ChrisLoong 请教下,支付系统你是如何操作的,每笔交易生成时,钱是先流到友好速搭官方支付宝,再流动到商家自己的支付宝嘛?还是其它的方式?

#39 楼 @luffycn 你去用下就知道了。支付接口都可以自己配置,钱是直接到商家支付宝。

@luffycn 问的不错,学到很多哈

You need to Sign in before reply, if you don't have an account, please Sign up first.