【问题标题】:JAX-WS web services thread safety and performance concernsJAX-WS Web 服务线程安全和性能问题
【发布时间】:2012-07-13 17:11:50
【问题描述】:

我从其他一些帖子和我对 JAX-WS Web 服务的理解中了解到它们不是线程安全的。我的 Web 服务将被 100 个客户端调用,我们需要能够处理大约 200 个事务/秒。

我的 Web 服务将与数据库交互以执行其工作,如果我在访问数据库的代码周围引入 synchronized 关键字,我基本上将确保一次只有一个线程访问数据库,我想知道我是否还会在这种情况下能够达到所需的吞吐量。在此先感谢您的帮助。

我被告知实际上将数据库访问工作转移到另一个类中并在方法级别实例化该类,这样我就不需要使用同步关键字并仍然实现线程安全。对吗?

【问题讨论】:

    标签: java multithreading web-services thread-safety jax-ws


    【解决方案1】:

    如果您需要事务和线程安全,为什么不直接使用 EJB 作为您的 JAX-WS 端点?

    【讨论】:

    • 对不起,我还没有探索过那个选项。。会马上做的。顺便说一下,使用无状态 EJB,您仍然可以以与平台无关的方式向您的客户公开您的 Web 服务吗?
    • 从客户的角度来看,它仍然与平台无关。只是端点实例的功能和生命周期会有所不同。基本上把你所有的 JAX-WS 注释放在一个 @Stateless bean 上。 docs.oracle.com/javaee/6/tutorial/doc/bnbor.html
    • 感谢您的回复@Chase 我一直在寻找更多关于这些方面的回复。如果这对我有用,我会检查并接受您的回答...
    【解决方案2】:

    我们需要有关该应用程序的更多信息。

    一般情况下 - 对于您描述的情况下的性能 + 我推荐的数据库访问。

    1. 仔细规划您的数据库 - 在可能/有意义的情况下编制索引,使用视图等...
    2. 尝试使用具有良好锁定机制(每行锁定)的数据库。这样,当两个请求访问不同的行时,您就不会受到整个表锁定的影响。
    3. 尽可能缩短交易时间。如果使用 EJB - 确保“读取数据”方法的事务范围不是Required 或RequiredNew(这可能会导致打开事务)。
    4. 如果您确实使用同步 - 请小心使用正确的锁。不要试图自动使用“同步”作为最容易编码的方法。尽可能考虑使用 ReaderWriterLock。
    5. 考虑在可能的情况下使用缓存,但请仔细规划,以便您的流程处理“相关”数据。

    从这些方向开始 - 我想你会看到你可以像这样实现你的绩效目标。

    【讨论】:

    • 谢谢@zaske。我会在实施解决方案时研究这些建议。
    猜你喜欢
    • 2013-01-13
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多