11
GlassFish Community Feedback GlassFish usage in Rakuten, Inc.

Glassfish community feedback: case of Rakuten Ichiba

Embed Size (px)

DESCRIPTION

Rakuten Ichiba is the biggest online shopping mall in Japan and use GlassFish as core APIs of Rakuten Ichiba. These slide decks show the exprience how to improve the performance of GlassFish at the peak time of Rakuten Ichiba's heavily-loaded sale.

Citation preview

Page 1: Glassfish community feedback: case of Rakuten Ichiba

GlassFish Community Feedback

GlassFish usage in Rakuten, Inc.

Page 2: Glassfish community feedback: case of Rakuten Ichiba

About me

Name: Makito Hashiyama(@capyogu)

Age: 29

Role: Team manager / In charge of APIs for Rakuten Ichiba

Like: GlassFish, Tomcat, KVS(memcached, Coherence), GAE,

Android…

E-mail: [email protected],

[email protected]

Page 3: Glassfish community feedback: case of Rakuten Ichiba

What is Rakuten? E-commerce and Internet company based in Tokyo, Japan

B2B2C e-commerce platform

E-Commerce

eBook

Travel

Other services & businesses

Rakuten Institute of Technology

Development center

Head Office / Regional Headquarters

Head Office

Page 4: Glassfish community feedback: case of Rakuten Ichiba

How We Are Using GlassFish

Usage

One of core API service for Rakuten Ichiba

Require high availability

Environment Use on production environment

GlassFish version 3.1.2.2

Our API Oracle

Coherence

GlassFish

Clusters

External

APIs

SOAP/

REST

Client side

Page 5: Glassfish community feedback: case of Rakuten Ichiba

Reference implementation of Java EE

Only GlassFish supported JAX-WS as standard in 2007

It was an advantage to evaluate new features earlier

Easy to manage with low cost We need to manage huge cluster without stopping

Cost saving(Weblogic -> GlassFish)

Benefits gleaned from Glassfish

Page 6: Glassfish community feedback: case of Rakuten Ichiba

What Worked with GlassFish

Community support(create patches)

https://java.net/jira/browse/GLASSFISH-5200

(If use jvmRoute JSESSIONID cookie is not secure even in

HTTPS)

https://java.net/jira/browse/GRIZZLY-1333

(NetworkAddressValidator will fail when passed property

substitution values)

We have contributed patched to GlassFish community.

Page 7: Glassfish community feedback: case of Rakuten Ichiba

Improvement to handle a huge traffic

Rakuten Super Sale

Biggest online sales in Japan

A lot of doorbuster deals(It causes a huge amount of traffic)

Performance bottleneck

External APIs called by our API were slow down

We needed to improve the system at the peek time

Our API

External

APIs delay Slow down Client side

Page 8: Glassfish community feedback: case of Rakuten Ichiba

Request

Task

Queue

Worker Thread

Worker Thread

Worker Thread

GlassFish

Worker Thread

Worker Thread

External

APIs

delay

delay

delay

delay

delay

CPU load

was high

Improvement to handle a huge traffic

Client

side

Page 9: Glassfish community feedback: case of Rakuten Ichiba

Request

Task

Queue

Worker Thread

Worker Thread

Worker Thread

GlassFish

External

APIs

(1)According to vmstat, ‘run queue’ was very high

(2)Decrease worker threads to keep ‘run queue’ low

(3)As a result, latency increased but throughput was improved

Improvement to handle a huge traffic

Client

side

Page 10: Glassfish community feedback: case of Rakuten Ichiba

As a result…

Our API could process over 12,000 transactions / minute

The result showed the high reliability and availability of

GlassFish

Improvement to handle a huge traffic

Page 11: Glassfish community feedback: case of Rakuten Ichiba

Resolve issues & challenge to upper goal

Some issues

Instance down due to the full of task queue

Unknown exception on server.log

Challenge to upper goal

org.glassfish.flashlight.impl.client.ReflectiveClientInvoker

java.lang.reflect.InvocationTargetException

CAUSE: java.lang.NullPointerException

id=101

target=org.glassfish.web.admin.monitor.HttpServiceStatsProvider@193e1fc

method=public void org.glassfish.web.admin.monitor.HttpServiceStatsProvider.

connectionAcceptedEvent(java.lang.String,int,java.lang.String)

paramNames=[listenerName, connection, address]

probeIndices=[0, 1, 2]

useProbeArgs=true

hasComputedParams=false