问题标签 [web-architecture]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - 删除母版页以提高网站性能
我正在考虑提高我们的 Asp.net Web 表单驱动应用程序的性能/用户体验。我们有一个实现单个母版页的 aspx 页面。母版页的布局如下:
现在,区域 1 上的树控件正在驱动区域 2 和区域 3 中的更新。根据树的节点加载不同的 aspx 页面。但这会使整个页面重新加载,这并不能提供良好的用户体验。
我正在考虑摆脱母版页并使用基于树节点选择的更新面板在 Area2 和 Area3 中动态加载用户控件。
请问有什么建议吗?
http - 为什么使用引用而不是 HTTP Referer 标头?
Trackbacks和 WebMentions 等相关协议的存在是为了在其他网站链接到它们时通知网站。但是 HTTP Referer 标头已经这样做了,并且被烘焙到现有堆栈中。那么为什么人们会使用 Trackbacks 和其他类似的系统呢?它们比 HTTP Referer 标头更好,这些优势与复杂性权衡相比如何?
我了解垃圾邮件发送者经常欺骗Referer 标头,希望将链接插入到Web 管理仪表板中。但是对于 Trackbacks 也是如此,并且可能对于其他竞争协议也是如此。因此,除非这些系统的主要目的是以某种方式打击垃圾邮件,否则我猜垃圾邮件与它无关。
zeromq - 负载测试 ZeroMQ (ZMQ_STREAM) 以找到它可以处理的最大同时用户
有没有人有任何实际场景对 ZMQ 套接字进行负载测试以获得最大数量。他们可以处理的“并发用户”(不是吞吐量)?看起来 ZeroMQ 在 FD 限制方面存在一些严重问题。
场景是:有许多 Web 服务器框架吹嘘他们可以处理数百万并发用户 - 现在如果 ZeroMQ 不能处理超过 FD_SETSIZE 没有。任何时间点的用户,对可扩展性都是一个非常严重的限制(因为FD不仅仅是进程资源,也是机器资源,所以在同一台机器上产生新进程没有意义)。
为了验证,我正在尝试加载测试 ZMQ_STREAM 以找出它可以维持多少并发用户。它是一个简单的“hello-world”响应服务器,它只监听 ZMQ_STREAM 并为每个请求返回“hello world”(严格接收后跟发送样式)。
现在,在使用 JMeter 进行测试时(使用 users=1000),点击断言:zmq_assert (fds.size () <= FD_SETSIZE)
. 这意味着什么?那个 ZMQ 持有 FD_SETSIZE 个 FD?但是(根据下面的代码)每个连接都会立即打开和关闭,我看不出有可能在任何时间点同时打开多个 FD。
问:如果是这样的话,任何基于ZMQ的应用程序实现百万用户并发连接的方式是什么?(除了让 1000 台机器每台处理 1000 个用户的明显且毫无意义的解决方案,或者将 FD_SETSIZE 增加到一个非常大的数字)
任何人都知道这些 FD 的使用方式和原因以及它们是如何耗尽的(更重要的是,其他框架,例如 nginx node.js 没有这个问题),请稍加说明。
服务器代码(如果重要)如下:
使用 JMeter,用户=1000
c++ - Web 服务器上的图像处理
我想在可以与网络应用程序轻松交互的服务器上运行图像处理算法。图像处理算法的计算量很大,在定制的库中不可用。目前我在 Heroku 上为我的网站使用 Ruby on Rails。
实现这一目标的最佳架构是什么?从网站获取图像 - 在其上运行图像处理算法 - 显示回网站
我的大部分图像处理代码都在 C/C++ 上。
我可以直接从 Ruby on Rails 调用 C/C++ 代码吗?这在 Heroku 上可行吗?
或者我应该设计一个系统,其中 C/C++ 代码公开一些可由 Ruby on Rails 服务器调用的 API?
session - 无状态仅将客户的状态转移到其他地方吗?
我花了一整天的时间了解什么是无状态架构。我读了很多帖子和答案,比如
Sticky Session / Session Affinity负载平衡策略的优缺点?
http://www.quora.com/What-is-stateless-and-statefull-web-architecture
似乎无状态只是将一些用户状态转移到其他地方(数据库/内存缓存或客户端 cookie)。这是对的吗?如果是,则状态仅存储在其他地方,因此必须有一些不是无状态的(客户端或服务器),尽管负载均衡器现在不需要担心路由哪台机器。
如果上面是正确的,如果我们选择将用户信息传输到中心位置(根据某些答案,传输到客户端似乎并不总是解决方案),例如数据库或内存缓存,我们仍然需要为每个请求找到此会话信息。这意味着持有用户状态的地方将面临同时处理数千万请求的相同压力。并且可能,我们找到会话信息的方式就像粘性会话(将信息请求路由到内存缓存中的单个节点)。那么为什么我们认为转移状态更具可扩展性呢?压力只是转移(而且总是,数据库已经有太多的负载)
我错过了什么或理解错误吗?
谢谢!
rest - REST中的ST(状态转移)是否意味着状态必须由客户端持有?
我读过Representational State Transfer (REST) 中的“state transfer”指的是什么?还有几篇关于 REST 的帖子或视频,我知道 REST 的约束之一是无状态的。
根据http://www.restapitutorial.com/lessons/whatisrest.html等许多帖子,为了使架构无状态,客户端必须持有足够的信息让服务器做正确的事情,这意味着服务器没有任何客户端状态。那么这是否意味着我们只是通过将一些用户状态(如 cookie)放在客户端中来构建一个 REST 应用程序?
但是根据许多帖子,例如Sticky Session / Session Affinity 负载平衡策略的优点和缺点?,我们可以通过将用户数据存储在数据库或内存缓存中来制作无状态应用程序,从而避免将会话存储在应用程序服务器中。如果我们尝试这种方法,我们可以制作一个 REST 架构吗?
spring-mvc - 带有 REST api 的 Web 服务器 - Spring Boot - 多个 servlet 容器
在我的架构中,我使用 spring 作为 web 服务器,提供静态 html 和 javascript 页面,以及作为 rest api。目前,我的 spring 应用程序侦听端口 8080。尽管我可以轻松地将其更改为端口 80,但我认为 api 和 Web 服务器应该在不同的端口上,并且认为没有理由创建一个单独的应用程序来提供静态内容,哪个弹簧可以轻松做到。
我确实查看了在线和其他一些问题,发现spring可以使用多个servlet容器监听两个不同的端口。有些问题甚至说所有要做的就是创建多个应用程序上下文。
但是,没有提及如何做到这一点,至少对我来说,这并不是微不足道的,尤其是在使用 Spring Boot 时。
- 如何创建多个 servlet 容器或多个应用程序上下文,以便侦听多个端口(80 和 8080)?
- 设置这些之后,我如何控制哪个 servlet 做什么?也就是说,哪一个服务于静态页面,哪一个服务于其余的 api?
-
编辑
以下问题似乎与我自己的问题相匹配,但如前所述,我不知道如何实现这一点,特别是在使用 Spring Boot/Annotations 时,而不是 xml 配置。
使用 spring boot 配置多个 servletcontainers/servlet
编辑 (2)
这种事情的一个很好的用例是让您的网站启用 ssl,但不是必需的。也就是说,您希望通过 potr 443 启用 ssl,但允许用户通过端口 80 使用不安全的访问。
编辑 (3)
我不知道 Dave Syer 的答案是否是最好的,但它似乎有效。请注意,与他的方法不同,我使用 servlet 容器定制器来更改端口,但我仍然使用第二个线程并创建第二个 spring 应用程序。
编辑(答案)
Dave Syer 的原始答案是有效的,但这不是我想要的。正如他的评论之一所述,如果您使用的是 Tomcat servlet 容器(spring 的默认值)或码头的 Handler,答案是创建第二个 Connector 对象。
我使用了类似以下的东西:
amazon-web-services - 我正在运行一个 REST API 服务器,但我不太确定基础架构。另外我可以做些什么来基准测试和提高速度?
我的基础设施是:gandi 域、aws dns、route53 api.domain cname 指向一个自签名启用 ssl 的 elb(有 1 个 elasticbeanstalk 实例)。Elasticbeanstalk 实例是基于 docker 的。这意味着 nginx 转发到 docker 实例。Docker 实例有提供静态文件的 nginx,以及到 golang 的反向代理(fastcgi 到端口 3000)。数据存储在 Amazon RDS 上,并使用 go-sql-driver 进行访问。
它看起来过于复杂,简化的最佳方法是什么?
django - 通过会话密钥在请求之间访问 pandas 数据框对象
我有一个带有松散包装类的 pandas 数据框,它为我的 django/DRF 应用程序提供元数据。该应用程序基本上是一种用户友好(非程序员)的方式来进行一些数据分析和验证。在请求之间,我希望能够保存数据框的状态,这样我就可以与数据进行一系列交互,但它不需要保存在数据库中(它只需要在浏览器会话中存活)。从这里查看 django 的会话框架是合乎逻辑的,但据我所知,会话数据应该是轻量级的,并且数据框对象不会 json 序列化。
因为我没有大量用户,并且我希望应用程序感觉像一个桌面站点,所以我正在考虑使用 django 缓存作为将数据帧对象保存在内存中的一种方式。所以把数据放在缓存中会像这样
然后除了在以下请求中使用 get 来访问之外,其他相同。这是处理此工作流程的好方法,还是我应该使用另一个系统在内存中保存相当大的数据(5mb 到 100mb)?
android - 当客户退出我的应用程序时,何时停止向客户发送推送通知
考虑到隐私,如果用户从他的移动客户端注销,我希望我的后端忘记我的客户端推送通知令牌。
最简单的用例是这样的:
乔治想看他的脸书,但没有手机。乔治在马特的手机中登录了 Facebook 应用程序。
完成后,乔治退出 Facebook 应用程序。
在这里,我希望服务器不会向 Matt 的手机发送“Mira 已接受您的好友请求”——该通知显然是针对 George 而不是 Matt。
我可以让客户端向服务器发送一个“注销”请求,但是如果 George 在点击注销请求时在掩体中并且它没有到达我的服务器会发生什么?
关于这个问题的一些额外想法:
只要用户没有主动注销,我就想继续推送通知(所以空闲时间系统注销是不可能的)
例如,如果 Facebook 没有互联网连接,它不会将您从应用程序中注销。这个有问题的解决方案,因为如果乔治不小心,他可能不会意识到他没有注销,并且会在他仍然登录的时候把手机还给马特!