企业解决方案的架构
我将开发一个相当大的系统,它需要具备大型系统的所有“品质”。该系统将在金融领域,因此需要一些强制性的东西(99.999%、故障转移、负载平衡等)。该系统更像是一个交换机,而不是一个“网络”应用程序。
我一直在做大量的研究...特别是当前的大型系统,如 twitter、ebay、amazon、facebook 等,但不幸的是它们大多是基于网络的。我选择了 Java 根,因为尽管我对任何新事物持开放态度,但我对该语言相当精通。
我花了几个小时在 Stack Overflow 上阅读,我收集到的一件事是没有“银弹”。该系统需要专门针对我的需求进行微调/开发。
这就是我目前的心态和想法...
数据库
Mysql 7 及其集群功能给我留下了深刻的印象。我会创建一个由几台机器组成的 Mysql 集群。然后,该集群将通过异步主从复制复制到另一台异地计算机。 mysql 集群前面有一个 mysql 负载均衡器。 NoSQL 根可能更好吗?
负载均衡
HAProxy 看起来很棒,但我可能会选择硬件解决方案...
应用程序
在尝试了许多不同的 AS 服务器(Glassfish、JBoss 和其他一些)之后,我得出的结论是,j2EE 在一些事情上限制了我,这些事情会导致问题出现(请参阅此之前问题)。我正在寻找一个java框架,它使我能够模块化我的代码。基本上编写可以分发到负载平衡和故障转移的机器集群中的“JARS”/模块。
例如 - 假设我有模块 A 和模块 B。我希望能够在两台机器上部署这两个模块,或者在一台机器上部署模块 A,在另一台机器上部署模块 B。以及让模块 A 负载平衡到 B(如果 B 在一台或多台机器上)。这是通过glassfish3和EJB实现的吗?我喜欢横向扩展而不是向上扩展的想法,我宁愿在一个集群中拥有 50 台机器,也不愿拥有 X 台疯狂规格的机器(我认为有点谷歌的心态) 我本想从头开始,但重新发明轮子是我的第二选择。
缓存
我正在寻找内存缓存的 hazelcast,因为该解决方案给我留下了最深刻的印象。
任何输入、反馈、链接、关键字或指南将不胜感激:)我也不介意非免费的解决方案。
编辑:我应该填写 Jeremy 指出的缺失的详细信息:
- 通过 Switch,我的意思是类似于 PayPal 的东西,
- 会有潜在的大量交易(我无法给出估计)
- ,技能和预算不起作用因为我幸运的是有资源。
I am going to be developing a fairly large system that needs to have all the "qualities" of a large system. This system will be in the financial space, so there are some mandatory things that are required (99.999%, fail over, load balancing etc.). The system is more of a switch then a "web" application.
I have been doing allot of research... Especially current Big systems like twitter, ebay, amazon, facebook and the like, but unfortunately they are mostly web based. I have chosen the Java root as I am quiet proficient in that language although I am open to anything new.
I have spent hours reading up here in Stack overflow and the one thing I gather is that there is no "Silver Bullet". The system will need to be fine tuned/developed specifically to my needs.
So this is my current mindset and thoughts...
Database
I am pretty impressed with Mysql 7 and their clustering capabilities. I would create a Mysql cluster of a few machines. This cluster would then be replicated to another offsite machine with their async mater-slave replication. The mysql cluster would be fronted by a mysql load balancer. Is the NoSQL root better maybe?
Load Balancing
HAProxy looks great but I might settle for a hardware solution...
Application
After playing around with many different AS servers (Glassfish, JBoss and a few others), I have come to the conclusion that j2EE limits me in a few things which cause cause problems down the line (see this previous question). What I am looking for is a framework for java that enables me to modularize my code. Basically write "JARS"/modules that can be distribute into a cluster of machines that load balance and have failover.
For example - Lets say I have Module A and Module B. I want to have the ability to deploy the two modules both on two machines OR module A on one machine and B on the other. As well as have module A load balance to B (if B is on one or more machines). Is this achieved by glassfish3 and EJB? I like the idea of scaling out and not up, I would rather have 50 machines in a cluster than X insanely spec'ed machines (kind of googles mindset, I think)
I was thinking of doing it from scratch but re-inventing the wheel is my second choice.
Cache
I am looking at hazelcast for a memory cache as I am most impressed with that solution.
Any input,feedback, links, keywords or guidlines will be greatly appreciated :) I also don't mind non-free solutions.
EDIT: I should fill in the details missing as pointed out by Jeremy:
- By Switch I mean something similar to PayPal
- There will be potentially large volumes (I cant give an estimate)
- Skills and budget dont play a role as I fortunately have the resources.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您似乎太关心技术选择,这不是架构< /a>.更好地关注应用程序的核心域(用 DDD 术语来说)。
另外,我不会预先太担心可扩展性问题。首先构建有用的解决方案要容易得多,只有在被证明有用后才开始扩展。否则,您将面临将所有资金投入到为无用应用程序构建可扩展架构的风险。
You seem too concerned about technological choices, which is not architecture. Better focus on your application's Core Domain (in DDD terms).
Also, I wouldn't be too concerned about scalability issues upfront. It is way easier to build useful solution first, and only then, once it is proven to be useful, begin to scale. Otherwise, you are risking of investing all your money into building scalable architecture for useless application.
那么这里的任何人几乎不可能提供令人信服的建议,
但是,看起来您已经决定的是 Amazon AWS 等云供应商提供的开箱即用的东西 - 松散耦合、负载平衡、高度可用的基础设施。
根据您的编辑进行编辑:
不要自己构建基础设施。其他公司,例如亚马逊和微软,已经解决了这个问题。特别是,Amazon 的解决方案符合 PCI 标准,可以立即提供您所需的“五个九”,而无需您执行任何操作。
相反,应该关注应用程序将执行的操作以及它将如何可靠且可扩展地执行此操作。
在这个阶段,我建议聘请几位顾问,至少为期几周。让他们组合三个或四个替代应用程序架构。每天/顾问的预算至少为 1000 美元,以获得知道自己在说什么的人。
并且,请记住,您不会从这样的免费网站获得明智的答案或指导。如果你真的想打造一个“PayPal 杀手”,你需要付费向那些在此类项目中处于领先地位的人寻求建议。这要么是对顾问的预付款,要么是对技术联合创始人的股权。
It's almost impossible for anyone here to give cogent advice without understanding
However, what it looks like you've decided is something that cloud vendors like Amazon AWS provide out of the box - a loosely coupled, load balanced, highly available infrastructure.
EDIT based on your edit:
Don't build the infrastructure yourself. Others, such as Amazon and Microsoft, already have this solved. In particular Amazon's solution is PCI compliant and can deliver the "five nines" you need immediately without you needing to do anything.
Rather, focus on what the application will do and how it will do it reliably and scalably.
At this stage I'd suggest hiring a couple of consultants for a couple of weeks, minimum. Have them put together three or four alternative application architectures. Budget $1000/day/consultant minimum to get someone who knows what they're talking about.
And, bear in mind you won't get sensible answers or guidance from a free site like this. If you really want to build a "PayPal killer" you'll need to pay for advice from someone who's been in the trenches on this kind of project. That'll either be upfront to consultants or in equity to a technical co-founder.